C++ 命名要求: ReversibleContainer
來自 cppreference.com
一個 ReversibleContainer 是一個 Container,其迭代器滿足 LegacyBidirectionalIterator 或 LegacyRandomAccessIterator 的要求。這類迭代器允許 ReversibleContainer 進行反向迭代。
目錄 |
[編輯] 要求
如果一個型別滿足 Container,且其迭代器型別屬於雙向或隨機訪問 迭代器類別,並且給定以下型別和值,滿足下表中的語義和複雜度要求,則該型別滿足 ReversibleContainer 的要求
型別 | 定義 |
X
|
一個 ReversibleContainer 型別 |
T
|
X 的 value_type |
值 | 定義 |
a | 型別 X 的值 |
[編輯] 型別
名稱 | 型別 | 要求 |
---|---|---|
typename X::reverse_iterator | std::reverse_iterator<X::iterator> | 一個迭代器型別,其 值型別 是 T |
typename X::const_reverse_iterator | std::reverse_iterator<X::const_iterator> | 一個常量迭代器型別,其 值型別 是 T |
[編輯] 表示式
下表中的 reverse_iterator
和 const_reverse_iterator
型別分別表示 typename X::reverse_iterator 和 typename X::const_reverse_iterator。
表示式 | 型別 | 語義 | 複雜度 |
---|---|---|---|
a.rbegin() | reverse_iterator 對於常量 a 的 const_reverse_iterator |
reverse_iterator(a.end()) | 常量 |
a.rend() | reverse_iterator 對於常量 a 的 const_reverse_iterator |
reverse_iterator(a.begin()) | 常量 |
a.crbegin() | const_reverse_iterator
|
const_cast<const X&>(a).rbegin() | 常量 |
a.crend() | const_reverse_iterator
|
const_cast<const X&>(a).rend() | 常量 |
[編輯] 庫型別
以下標準庫型別滿足 ReversibleContainer 要求
(C++11) |
固定大小的原位連續陣列 (類模板) |
雙端佇列 (類模板) | |
雙向連結串列 (類模板) | |
可變大小的連續陣列 (類模板) | |
(C++26) |
可變大小、固定容量、原地連續陣列 (類模板) |
鍵值對集合,按鍵排序,鍵唯一 (類模板) | |
鍵值對的集合,按鍵排序 (類模板) | |
唯一鍵的集合,按鍵排序 (類模板) | |
鍵的集合,按鍵排序 (類模板) |
[編輯] 示例
以下示例反向迭代一個 vector(它具有舊式隨機訪問迭代器)。
執行此程式碼
#include <iostream> #include <vector> int main() { std::vector<int> v = {3, 1, 4, 1, 5, 9}; for (std::vector<int>::const_reverse_iterator i{v.crbegin()}; i != v.crend(); ++i) std::cout << *i << ' '; std::cout << '\n'; }
輸出
9 5 1 4 1 3
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
LWG 2105 | C++98 | typename X::const_reverse_iterator 曾 被要求為值型別為 const T 的迭代器型別 |
被要求為值型別為 T 的常量迭代器型別 |