# Concept IteratorAssociatedTypesConcept
Requires metafunctions for the associated types used in the iterator concepts.

All Subcl's | BidirectionalIteratorConcept, ForwardIteratorConcept, InputIteratorConcept, MutableBidirectionalIteratorConcept, MutableForwardIteratorConcept, MutableRandomAccessIteratorConcept, MutableRootedIteratorConcept, MutableRootedRandomAccessIteratorConcept, OutputIteratorConcept, RandomAccessIteratorConcept, RootedIteratorConcept, RootedRandomAccessIteratorConcept
Defined in | <seqan/basic.h>
Signature | `IteratorAssociatedTypesConcept<T>`

## Detailed Description

The SeqAn iterators mirror the definitions from ConceptC++.

## Interface Function Overview

- `TGetValue getValue(it);`
  Returns get-value of pointed-to character.
- `TReference operator*(it);`
  Returns reference to the pointed-to value.
- `TReference value(it);`
  Returns reference to the pointed-to value.

## Interface Metafunction Overview

- `Size<TContainer>::Type`
  Returns the type for distances between two iterators.
- `GetValue<TIter>::Type`
  The get-value type of the iterator (same as the get-value type of the underlying container).
- `Pointer<TIter>::Type`
  Returns pointer to an object, required for `operator->`, for example.
- `Reference<TIter>::Type`
  The reference type of the iterator (same as the reference type of the underlying container).
- `Value<TIter>::Type`
  The value type of the iterator (same as the value type of the underlying container).

## Interface Functions Detail

### `TGetValue getValue(it);`

Deprecated.

Use `operator*()` instead.

Returns get-value of pointed-to character.

#### Parameters

`it` | The iterator to get get-value from.

#### Returns

`TGetValue` | The get-value that is pointed to.

#### Data Races

If not stated otherwise, concurrent invocation is not guaranteed to be thread-safe.

### `TReference operator*(it);`

Returns reference to the pointed-to value.

#### Parameters

`it` | The iterator to dereference.

#### Returns

`TReference` | The reference type.

#### Data Races

If not stated otherwise, concurrent invocation is not guaranteed to be thread-safe.

### `TReference value(it);`

Deprecated.

Use `operator*()` instead.

Returns reference to the pointed-to value.

#### Parameters

`it` | The iterator to dereference.

#### Returns

`TReference` | The reference type.

#### Data Races

If not stated otherwise, concurrent invocation is not guaranteed to be thread-safe.

## Interface Metafunctions Detail

### `Size<TContainer>::Type`

Returns the type for distances between two iterators.

#### Template Parameters

`TContainer` | The Container type to query.

#### Returns

`Type` | The type to use for storing iterator distances sizes.

This must be the same type as the distance type of the containers iterators.

### `GetValue<TIter>::Type`

The get-value type of the iterator (same as the get-value type of the underlying container).

#### Template Parameters

`TIter` | The `TIter` class to query for its get-value type.

#### Returns

`Type` | The get-value type of `TIter`

### `Pointer<TIter>::Type`

Returns pointer to an object, required for `operator->`, for example.

#### Template Parameters

`TIter` | The type to query.

#### Returns

`Type` | Pointer type.

### `Reference<TIter>::Type`

The reference type of the iterator (same as the reference type of the underlying container).

#### Template Parameters

`TIter` | The `TIter` class to query for its reference type.

#### Returns

`Type` | The reference type of `TIter`

### `Value<TIter>::Type`

The value type of the iterator (same as the value type of the underlying container).

#### Template Parameters

`TIter` | The `TIter` class to query for its value type.

#### Returns

`Type` | The value type of `TIter`

#### Dox Sources

    /*!
     * @concept IteratorAssociatedTypesConcept
     *
     * @headerfile <seqan/basic.h>
     *
     * @brief Requires metafunctions for the associated types used in the iterator
     *        concepts.
     *
     * @signature IteratorAssociatedTypesConcept<T>
     *
     * The SeqAn iterators mirror the definitions from <a href="http://generic-progr
     * amming.org/languages/conceptcpp/concept_web.php?header=iterator">ConceptC++</
     * a>.
     *
     * @mfn IteratorAssociatedTypesConcept#Value
     *
     * @brief The value type of the iterator (same as the value type of the
     *        underlying container).
     *
     * @signature Value<TIter>::Type
     *
     * @tparam TIter The <tt>TIter</tt> class to query for its value type.
     *
     * @return Type The value type of <tt>TIter</tt>
     *
     * @mfn IteratorAssociatedTypesConcept#GetValue
     *
     * @brief The get-value type of the iterator (same as the get-value type of the
     *        underlying container).
     *
     * @signature GetValue<TIter>::Type
     *
     * @tparam TIter The <tt>TIter</tt> class to query for its get-value type.
     *
     * @return Type The get-value type of <tt>TIter</tt>
     *
     * @mfn IteratorAssociatedTypesConcept#Reference
     *
     * @brief The reference type of the iterator (same as the reference type of the
     *        underlying container).
     *
     * @signature Reference<TIter>::Type
     *
     * @tparam TIter The <tt>TIter</tt> class to query for its reference type.
     *
     * @return Type The reference type of <tt>TIter</tt>
     *
     * @mfn IteratorAssociatedTypesConcept#Difference
     *
     * @brief Returns the type for distances between two iterators.
     *
     * @signature Size<TContainer>::Type
     *
     * @tparam TContainer The Container type to query.
     *
     * @return Type The type to use for storing iterator distances sizes.
     *
     * This must be the same type as the distance type of the containers iterators.
     *
     * @mfn IteratorAssociatedTypesConcept#Pointer
     *
     * @brief Returns pointer to an object, required for <tt>operator-></tt>, for
     *        example.
     *
     * @signature Pointer<TIter>::Type
     *
     * @tparam TIter The type to query.
     *
     * @return Type Pointer type.
     *
     * @fn IteratorAssociatedTypesConcept#operator*
     *
     * @brief Returns reference to the pointed-to value.
     *
     * @signature TReference operator*(it);
     *
     * @param[in] it The iterator to dereference.
     *
     * @return TReference The reference type.
     *
     * @fn IteratorAssociatedTypesConcept#value
     *
     * @brief Returns reference to the pointed-to value.
     *
     * @deprecated Use <tt>operator*()</tt> instead.
     *
     * @signature TReference value(it);
     *
     * @param[in] it The iterator to dereference.
     *
     * @return TReference The reference type.
     *
     * @fn IteratorAssociatedTypesConcept#getValue
     *
     * @brief Returns get-value of pointed-to character.
     *
     * @deprecated Use <tt>operator*()</tt> instead.
     *
     * @signature TGetValue getValue(it);
     *
     * @param[in] it The iterator to get get-value from.
     *
     * @return TGetValue The get-value that is pointed to.
     */