反向迭代器
如果我們想要向後遍歷列表或向量,我們可以使用 reverse_iterator
。反向迭代器由雙向或隨機訪問迭代器構成,它作為成員儲存,可以通過 base()
訪問。
要向後迭代,請使用 rbegin()
和 rend()
作為集合結束的迭代器,以及集合的開始。
例如,向後迭代使用:
std::vector<int> v{1, 2, 3, 4, 5};
for (std::vector<int>::reverse_iterator it = v.rbegin(); it != v.rend(); ++it)
{
cout << *it;
} // prints 54321
可以通過 base()
成員函式將反向迭代器轉換為前向迭代器。關係是反向迭代器引用一個元素超過 base()
迭代器:
std::vector<int>::reverse_iterator r = v.rbegin();
std::vector<int>::iterator i = r.base();
assert(&*r == &*(i-1)); // always true if r, (i-1) are dereferenceable
// and are not proxy iterators
+---+---+---+---+---+---+---+
| | 1 | 2 | 3 | 4 | 5 | |
+---+---+---+---+---+---+---+
↑ ↑ ↑ ↑
| | | |
rend() | rbegin() end()
| rbegin().base()
begin()
rend().base()
在迭代器標記元素之間位置的視覺化中,關係更簡單:
+---+---+---+---+---+
| 1 | 2 | 3 | 4 | 5 |
+---+---+---+---+---+
↑ ↑
| |
| end()
| rbegin()
begin() rbegin().base()
rend()
rend().base()