# Spec ZipContainerView
Ties one or more containers into a non-resizable container view together.

Extends | ContainerView
All Extended | ContainerView
All Impl'd | AssignableConcept, ContainerConcept, DestructibleConcept
Defined in | <seqan/sequence.h>
Signature | `template <typename... TContTypes, typename TSpec> class ContainerView<std::tuple<TContTypes...>, ZipContainer<TSpec> >`

## Template Parameters

`TContTypes` | One or more types of all containers tied into the zip container view.
`TSpec` | The specialization type.

## Member Function Overview

### Member Functions Inherited From AssignableConcept

- `operator=`

## Interface Function Overview

### Interface Functions Inherited From ContainerView

- `ContainerView`

### Interface Functions Inherited From AssignableConcept

- `assign`
- `set`
- `move`

### Interface Functions Inherited From ContainerConcept

- `writeValue`
- `write`
- `begin`
- `end`
- `length`
- `empty`
- `swap`
- `getObjectId`
- `moveValue`
- `append`
- `appendValue`
- `shrinkToFit`
- `directionIterator`

## Interface Metafunction Overview

### Interface Metafunctions Inherited From ContainerConcept

- `DefaultGetIteratorSpec`
- `DefaultIteratorSpec`
- `Difference`
- `DirectionIterator`
- `GetValue`
- `Iterator`
- `Position`
- `Reference`
- `Size`
- `Value`

## Detailed Description

### Example

The following example demonstrates the functionality of the ZipContainerView:

    #include <iostream>

    #include <seqan/sequence.h>
    #include <seqan/stream.h>  // for output

    using namespace seqan;

    int main()
    {
        StringSet<CharString> names;
        StringSet<CharString> surnames;
        String<int>           ages;

        appendValue(names, "John");
        appendValue(names, "Johnny");
        appendValue(names, "Garfield");

        appendValue(surnames, "Doe");
        appendValue(surnames, "Donny");
        appendValue(surnames, "the Cat");

        appendValue(ages, 98);
        appendValue(ages, 20);
        appendValue(ages, 42);

        auto pRegister = makeZipView(names, surnames, ages);

        for (auto person : pRegister)
            std::cout << std::get<1>(person) << ", " << std::get<0>(person) << ": " << std::get<2>(person) << std::endl;
        return 0;
    }

Demo: demos/dox/sequence/container_view_zip.cpp

This outputs the following to the console:

    Doe, John: 98
    Donny, Johnny: 20
    the Cat, Garfield: 42

#### Dox Sources

    /*!
     * @class ZipContainerView
     *
     * @extends ContainerView
     *
     * @headerfile <seqan/sequence.h>
     *
     * @brief Ties one or more containers into a non-resizable container view
     *        together.
     *
     * @signature template <typename... TContTypes, typename TSpec> class
     *            ContainerView<std::tuple<TContTypes...>, ZipContainer<TSpec> >
     *
     * @tparam TContTypes One or more types of all containers tied into the zip
     *                    container view.
     * @tparam TSpec The specialization type.
     *
     * @section Example
     *
     * The following example demonstrates the functionality of the @link
     * ZipContainerView @endlink:
     *
     * @include demos/dox/sequence/container_view_zip.cpp
     *
     * This outputs the following to the console:
     *
     * @include demos/dox/sequence/container_view_zip.cpp.stdout
     */