std::reverse_iterator<Iter>::operator[]
来自cppreference.com
<tbody>
</tbody>
/* 未指定 */ operator[]( difference_type n ) const; |
(C++17 起为 constexpr) |
|
返回对处于指定相对位置的元素的引用。
参数
| n | - | 相对于当前位置的位置 |
返回值
current[-n - 1]
注解
返回类型被 LWG 问题 386 改为未指定,因为当时底层迭代器的 operator[] 的返回类型也未指定。
然而,到了 N3066 时,老式随机访问迭代器 (LegacyRandomAccessIterator) 的 operator[] 的返回值规定可以转换为 reference。所有的常见实现中,operator[] 的返回类型均被声明为 reference。另见 LWG 问题 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]) 是 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]) 是 int&
std::cout << '\n';
// constexpr 语境
constexpr static std::array<int, 4> z{0, 1, 2, 3};
constexpr std::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; // 编译错误:底层迭代器并未实现随机访问迭代器
}
输出:
3 2 1 0
3 2 1 0
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
| 缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
|---|---|---|---|
| LWG 386 | C++98 | 返回类型是 reference
|
改为未指定 |
参阅
| 访问被指向的元素 (公开成员函数) |