| Iterator concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator primitives | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Algorithm concepts and utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Indirect callable concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Common algorithm requirements | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator adaptors | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
reverse_iterator::operator[] | ||||
| Non-member functions | ||||
(C++20) | ||||
(C++20) | ||||
(C++14) |
/* unspecified */ operator[]( difference_type n)const; | (constexpr since C++17) | |
Returns a reference to the element at specified relative location.
Contents |
| n | - | position relative to current location |
current[-n-1]
The return type was changed byLWG issue 386 to be unspecified because the return type of the underlying iterator'soperator[] was also unspecified at the time.
However, as ofN3066, the return type of aLegacyRandomAccessIterator'soperator[] is required to be convertible toreference. In all common implementations, the return type is declared to bereference. See alsoLWG issue 2595.
#include <array>#include <cstddef>#include <iostream>#include <iterator>#include <list>#include <vector> int main(){int a[]{0,1,2,3};std::reverse_iterator<int*> iter1{std::rbegin(a)};for(std::size_t i{}; i!=std::size(a);++i)std::cout<< iter1[i]<<' ';// decltype(iter1[i]) is int&std::cout<<'\n'; std::vector v{0,1,2,3};std::reverse_iterator<std::vector<int>::iterator> iter2{std::rbegin(v)};for(std::size_t i{}; i!=std::size(v);++i)std::cout<< iter2[i]<<' ';// decltype(iter2[i]) is int&std::cout<<'\n'; // constexpr contextconstexprstaticstd::array<int,4> z{0,1,2,3};constexprstd::reverse_iterator<decltype(z)::const_iterator> iter3{std::crbegin(z)}; static_assert(iter3[1]==2); std::list li{0,1,2,3};std::reverse_iterator<std::list<int>::iterator> iter4{std::rbegin(li)};*iter4=42;// OK// iter4[0] = 13; // Compilation error: the underlying iterator// does not model the random access iterator}
Output:
3 2 1 03 2 1 0
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 386 | C++98 | the return type wasreference | made unspecified |
| accesses the pointed-to element (public member function)[edit] |