CARVIEW |
Select Language
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Thu, 24 Jul 2025 12:19:18 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Location: /reference/iterator/BidirectionalIterator/
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 24 Jul 2025 12:19:18 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
ETag: W/"7d3b-3y25ZqRy7uPl9vS/DMzD6Qo6WDc"
Content-Encoding: gzip
Empty class to identify the category of an iterator as a bidirectional iterator:
Bidirectional iterators are iterators that can be used to access the sequence of elements in a range in both directions (towards the end and towards the beginning).
All random-access iterators are also valid bidirectional iterators.
There is not a single type of bidirectional iterator: Each container may define its own specific iterator type able to iterate through it and access its elements.
Bidirectional iterators have the same properties as forward iterators, with the only difference that they can also be decremented:
Where X is a bidirectional iterator type, a and b are objects of this iterator type, and t is an object of the type pointed by the iterator type (or some other type that can be assigned to the lvalue returned by dereferencing an object of type X).
Constant iterators are iterators that do not fulfill the requirements of an output iterator; Dereferencing them yields a reference to a constant element (such as
All bidirectional iterators are also valid forward and input iterators.
Reference
C library:
- <cassert> (assert.h)
- <cctype> (ctype.h)
- <cerrno> (errno.h)
-
<cfenv> (fenv.h)C++11
- <cfloat> (float.h)
-
<cinttypes> (inttypes.h)C++11
- <ciso646> (iso646.h)
- <climits> (limits.h)
- <clocale> (locale.h)
- <cmath> (math.h)
- <csetjmp> (setjmp.h)
- <csignal> (signal.h)
- <cstdarg> (stdarg.h)
-
<cstdbool> (stdbool.h)C++11
- <cstddef> (stddef.h)
-
<cstdint> (stdint.h)C++11
- <cstdio> (stdio.h)
- <cstdlib> (stdlib.h)
- <cstring> (string.h)
-
<ctgmath> (tgmath.h)C++11
- <ctime> (time.h)
-
<cuchar> (uchar.h)C++11
- <cwchar> (wchar.h)
- <cwctype> (wctype.h)
Containers:
-
<array>C++11
- <deque>
-
<forward_list>C++11
- <list>
- <map>
- <queue>
- <set>
- <stack>
-
<unordered_map>C++11
-
<unordered_set>C++11
- <vector>
-
Input/Output:
Multi-threading:
-
<atomic>C++11
-
<condition_variable>C++11
-
<future>C++11
-
<mutex>C++11
-
<thread>C++11
-
Other:
- <algorithm>
- <bitset>
-
<chrono>C++11
-
<codecvt>C++11
- <complex>
- <exception>
- <functional>
-
<initializer_list>C++11
- <iterator>
- <limits>
- <locale>
- <memory>
- <new>
- <numeric>
-
<random>C++11
-
<ratio>C++11
-
<regex>C++11
- <stdexcept>
- <string>
-
<system_error>C++11
-
<tuple>C++11
-
<type_traits>C++11
-
<typeindex>C++11
- <typeinfo>
- <utility>
- <valarray>
<iterator>
- iterator
- iterator_traits
functions
- advance
- back_inserter
-
beginC++11
- distance
-
endC++11
- front_inserter
- inserter
-
make_move_iteratorC++11
-
nextC++11
-
prevC++11
iterator categories
predefined iterators
- Reference
- <iterator>
- bidirectional_iterator_tag
class
<iterator>
std::bidirectional_iterator_tag
struct bidirectional_iterator_tag {}
Bidirectional iterator category
Bidirectional iterators
- InputOutput
- Forward
- Bidirectional
- Random Access
Bidirectional iterators are iterators that can be used to access the sequence of elements in a range in both directions (towards the end and towards the beginning).
All random-access iterators are also valid bidirectional iterators.
There is not a single type of bidirectional iterator: Each container may define its own specific iterator type able to iterate through it and access its elements.
Bidirectional iterators have the same properties as forward iterators, with the only difference that they can also be decremented:
property | valid expressions |
---|---|
Is default-constructible, copy-constructible, copy-assignable and destructible | X a; |
Can be compared for equivalence using the equality/inequality operators (meaningful when both iterator values iterate over the same underlying sequence). | a == b |
Can be dereferenced as an rvalue (if in a dereferenceable state). | *a |
For mutable iterators (non-constant iterators): Can be dereferenced as an lvalue (if in a dereferenceable state). | *a = t |
Can be incremented (if in a dereferenceable state). The result is either also dereferenceable or a past-the-end iterator. Two iterators that compare equal, keep comparing equal after being both increased. | ++a |
Can be decremented (if a dereferenceable iterator value precedes it). | --a a-- *a-- |
property | valid expressions |
---|---|
Is default-constructible, copy-constructible, copy-assignable and destructible | X a; |
Can be compared for equivalence using the equality/inequality operators (meaningful when both iterator values iterate over the same underlying sequence). | a == b |
Can be dereferenced as an rvalue (if in a dereferenceable state). | *a |
For mutable iterators (non-constant iterators): Can be dereferenced as an lvalue (if in a dereferenceable state). | *a = t |
Can be incremented (if in a dereferenceable state). The result is either also dereferenceable or a past-the-end iterator. Two iterators that compare equal, keep comparing equal after being both increased. | ++a |
Can be decremented (if a dereferenceable iterator value precedes it). | --a a-- *a-- |
Lvalues are swappable. | swap(a,b) |
Where X is a bidirectional iterator type, a and b are objects of this iterator type, and t is an object of the type pointed by the iterator type (or some other type that can be assigned to the lvalue returned by dereferencing an object of type X).
Constant iterators are iterators that do not fulfill the requirements of an output iterator; Dereferencing them yields a reference to a constant element (such as
const T&
).All bidirectional iterators are also valid forward and input iterators.
See also
- input_iterator_tag
- Input iterator category (class)
- output_iterator_tag
- Output iterator category (class)
- forward_iterator_tag
- Forward iterator category (class)
- random_access_iterator_tag
- Random-access iterator category (class)
- iterator
- Iterator base class (class template)
Home page | Privacy policy
© cplusplus.com, 2000-2025 - All rights reserved - v3.3.4s
Spotted an error? contact us
© cplusplus.com, 2000-2025 - All rights reserved - v3.3.4s
Spotted an error? contact us