- Tumbleweed 2024.07.05-1.3
- Leap-16.0
- Leap-15.6
std::bidirectional_iterator(3) | C++ Standard Libary | std::bidirectional_iterator(3) |
NAME¶
std::bidirectional_iterator - std::bidirectional_iterator
Synopsis¶
Defined in header <iterator>
template< class I >
concept bidirectional_iterator =
std::forward_iterator<I> &&
std::derived_from</*ITER_CONCEPT*/<I>,
std::bidirectional_iterator_tag> && (since C++20)
requires(I i) {
{ --i } -> std::same_as<I&>;
{ i-- } -> std::same_as<I>;
};
The concept bidirectional_iterator refines forward_iterator by adding the
ability to
move an iterator backward.
Notes¶
Unlike the LegacyBidirectionalIterator requirements, the
bidirectional_iterator
concept does not require dereference to return an lvalue.
Example¶
A minimum bidirectional iterator.
#include <cstddef>
#include <iterator>
struct SimpleBidiIterator
{
using difference_type = std::ptrdiff_t;
using value_type = int;
int operator*() const;
SimpleBidiIterator& operator++();
SimpleBidiIterator operator++(int)
{
auto tmp = *this;
++*this;
return tmp;
}
SimpleBidiIterator& operator--();
SimpleBidiIterator operator--(int)
{
auto tmp = *this;
--*this;
return tmp;
}
bool operator==(const SimpleBidiIterator&) const;
};
static_assert(std::bidirectional_iterator<SimpleBidiIterator>);
See also¶
forward_iterator specifies that an input_iterator is a forward
iterator,
(C++20) supporting equality comparison and multi-pass
(concept)
specifies that a bidirectional_iterator is a random-access
random_access_iterator iterator, supporting advancement in constant time and
(C++20) subscripting
(concept)
2024.06.10 | http://cppreference.com |