std::reverse_iterator<Iter>::reverse_iterator
来自cppreference.com
< cpp | iterator | reverse iterator
reverse_iterator(); | (1) | (C++17 起为 constexpr ) |
explicit reverse_iterator( iterator_type x ); | (2) | (C++17 起为 constexpr ) |
template< class U > reverse_iterator( const reverse_iterator<U>& other ); | (3) | (C++17 起为 constexpr ) |
构造新的 reverse_iterator
。
重载 | current |
---|---|
(1) | 值初始化 |
(2) | 以 x 初始化 |
(3) | 以 other.current 初始化 |
3) 转换构造函数。
此重载只有在 std::is_same_v<U, Iter> 是 false 且 std::convertible_to<const U&, Iter> 得到实现时才会参与重载决议。 | (C++20 起) |
参数
x | - | 要适配的迭代器 |
other | - | 要复制的迭代器适配器 |
示例
运行此代码
#include <cassert> #include <concepts> #include <iterator> #include <vector> int main() { std::vector v{0, 1, 2, 3, 4}; using ReverseIt = std::reverse_iterator<std::vector<int>::const_iterator>; ReverseIt i1; // 重载 (1) i1 = v.crbegin(); assert(*i1 == 4); ReverseIt i2(i1); // 重载 (2) assert(i2[0] == 4); int x[]{1, 2, 3}; auto i3 = std::reverse_iterator<int*>(x + std::size(x)); // 重载 (1) i3[0] = -3; assert(x[2] == -3); std::reverse_iterator<int const*> i4(i3); // 重载 (3): int => const int static_assert(std::convertible_to<decltype(i3)::value_type, decltype(i4)::value_type>); // i4[0] = 5; // 错误:对只读位置赋值 }
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
LWG 235 | C++98 | 未指定重载 (1) 的效果 | 已指定 |
LWG 1012 | C++98 | 重载 (1) 会默认初始化 current | 改为值初始化 |
LWG 3435 | C++20 | 重载 (3) 没有被约束 | 添加约束 |
参阅
赋值另一 reverse_iterator (公开成员函数) | |
(C++14) | 创建拥有从实参推出的类型的 std::reverse_iterator (函数模板) |