# Concept BidirectionalIteratorConcept
Iterator that can be both incremented and decremented.

Extends | ForwardIteratorConcept
All Extended | CopyConstructibleConcept, DefaultConstructibleConcept, EqualityComparableConcept, ForwardIteratorConcept, InputIteratorConcept, IteratorAssociatedTypesConcept
All Subcl's | MutableBidirectionalIteratorConcept, MutableRandomAccessIteratorConcept, MutableRootedRandomAccessIteratorConcept, RandomAccessIteratorConcept, RootedRandomAccessIteratorConcept
Defined in | <seqan/basic.h>
Signature | `BidirectionalIteratorConcept<T>`

## Detailed Description

The SeqAn iterators mirror the definitions from ConceptC++.

### Examples

In the following, `x` is an iterator to type `X`.

The following expressions must be valid.

    --x  // Predecrement.
    x--  // Postdecrement.

## Member Function Overview

### Member Functions Inherited From EqualityComparableConcept

- `operator!=`
- `operator==`

## Interface Function Overview

- `void goPrevious(it);`
  Iterates to pevious position.
- `TIterator operator--(it);`
  C++ built-in prefix decrement operator.
- `TIterator operator--(it, i);`
  C++ built-in suffix decrement operator.

### Interface Functions Inherited From InputIteratorConcept

- `goNext`
- `operator++(prefix)`
- `operator++(suffix)`
- `operator->`

### Interface Functions Inherited From IteratorAssociatedTypesConcept

- `getValue`
- `operator*`
- `value`

## Interface Metafunction Overview

### Interface Metafunctions Inherited From IteratorAssociatedTypesConcept

- `Difference`
- `GetValue`
- `Pointer`
- `Reference`
- `Value`

## Interface Functions Detail

### `void goPrevious(it);`

Iterates to pevious position.

#### Parameters

`it` | Iterator to move to previous position.

This function is equivalent to `--iterator`.

#### Data Races

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

### `TIterator operator--(it);`

C++ built-in prefix decrement operator.

#### Parameters

`it` | The iterator to increment.

#### Returns

`TIterator` | Reference to the incremented iterator.

#### Data Races

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

### `TIterator operator--(it, i);`

C++ built-in suffix decrement operator.

#### Parameters

`it` | The iterator to increment.
`i` | An int value to mark the operator as suffix decrement.

#### Returns

`TIterator` | Reference to the incremented iterator.

#### Data Races

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

#### Dox Sources

    /*!
     * @concept BidirectionalIteratorConcept
     *
     * @headerfile <seqan/basic.h>
     *
     * @extends ForwardIteratorConcept
     *
     * @brief Iterator that can be both incremented and decremented.
     *
     * @signature BidirectionalIteratorConcept<T>
     *
     * The SeqAn iterators mirror the definitions from <a href="http://generic-progr
     * amming.org/languages/conceptcpp/concept_web.php?header=iterator">ConceptC++</
     * a>.
     *
     * @section Examples
     *
     * In the following, <tt>x</tt> is an iterator to type <tt>X</tt>.
     *
     * The following expressions must be valid.
     *
     * @code{.cpp}
     * --x  // Predecrement.
     * x--  // Postdecrement.
     * @endcode
     *
     *
     * @fn BidirectionalIteratorConcept#operator--(prefix)
     *
     * @brief C++ built-in prefix decrement operator.
     *
     * @signature TIterator operator--(it);
     *
     * @param[in,out] it The iterator to increment.
     *
     * @return TIterator Reference to the incremented iterator.
     *
     * @fn BidirectionalIteratorConcept#operator--(suffix)
     *
     * @brief C++ built-in suffix decrement operator.
     *
     * @signature TIterator operator--(it, i);
     *
     * @param[in,out] it The iterator to increment.
     * @param[in] i An int value to mark the operator as suffix decrement.
     *
     * @return TIterator Reference to the incremented iterator.
     *
     * @fn BidirectionalIteratorConcept#goPrevious
     *
     * @brief Iterates to pevious position.
     *
     * @signature void goPrevious(it);
     *
     * @param[in,out] it Iterator to move to previous position.
     *
     * This function is equivalent to <tt>--iterator</tt>.
     */