写在前面
- 迭代器适配器种类有很多,此次主要说明 reverse_iterator 。同时对 迭代器函数 rbegin 和 rend 进行说明。
一 迭代器适配器
- 迭代器适配器种类,例如:
- reverse_iterator
- move_iterator(C++11)
- insert_iterator
- front_insert_iterator
- back_insert_iterator
- istream_iterator
- ostream_iterator
二 迭代器适配器相关函数
三 reverse_iterator
template< class Iter >
class reverse_iterator : public std::iterator<
typename std::iterator_traits<Iter>::iterator_category,
typename std::iterator_traits<Iter>::value_type,
typename std::iterator_traits<Iter>::difference_type,
typename std::iterator_traits<Iter>::pointer,
typename std::iterator_traits<Iter>::reference > (C++17 前)
template< class Iter >
class reverse_iterator; (C++17 起)
- 说明
- reverse_iterator 反转给定迭代器方向的迭代器适配器。
- 对于从迭代器 i 构造的 r 逆向迭代器,关系 &r == &(i-1) 始终为 true (只要 r 可解引用)
四 rbegin 和 rend
std::vector<int> vc{1,2,3,4,5,6,7,8,9};
print("it: ", vc.begin(), vc.end());
print("reverse it: ", vc.rbegin(), vc.rend());
auto begin = vc.begin();
auto end = vc.end();
auto rbegin = vc.rbegin();
auto rend = vc.rend();
auto it = std::find(vc.begin(), vc.end(), 5);
std::cout << "*it: " << *it << std::endl;
auto rit = std::reverse_iterator<decltype(it)>(it);
std::cout << "*rit: " << *rit << std::endl;
auto rit_base = rit.base();
std::cout << "*rit_base: " << *rit_base << std::endl;
it: : 1 2 3 4 5 6 7 8 9
reverse it: : 9 8 7 6 5 4 3 2 1
*it: 5
*rit: 4
*rit_base: 5
begin: 0x01168dc0
end: 0x01168de4
rgbegin:0x01168de0 (current ptr: 0x01168de4)
rend: 0x01168dbc (current ptr: 0x01168dc0)
- 使用 std::reverse_iterator 将 iterator 转换为 reverse iterator. (注释1)
- base() 将 reverse iterator 转换为 iterator. (注释2)
五 参考