Ranges 擴充套件
來自 cppreference.com
C++ Ranges 擴充套件,ISO/IEC TS 21425:2017,指定了對核心語言的一項修改,並定義了本頁列出的 C++ 標準庫新元件。
Ranges TS 基於經 Concepts TS 修改的 C++14 標準。
目錄 |
[編輯] 核心語言更改
Ranges TS 修改了 基於 range 的 for 迴圈 的規範,以允許不同型別的 begin 和 end 迭代器。此更改允許使用哨兵,並且也存在於 C++17 中。
[編輯] 概念
核心語言概念 | |
定義於標頭檔案
<experimental/ranges/concepts> | |
定義於名稱空間
std::experimental::ranges | |
指定型別與另一型別相同 (概念) | |
指定型別派生自另一型別 (概念) | |
指定型別可隱式轉換為另一型別 (概念) | |
指定兩種型別共享一個共同的引用型別 (概念) | |
指定兩種型別共享一個共同的型別 (概念) | |
指定型別是整型 (概念) | |
指定型別是帶符號的整型 (概念) | |
指定型別是無符號的整數型別 (概念) | |
指定型別可從另一型別賦值 (概念) | |
指定型別可以被交換,或者兩種型別可以互相交換 (概念) | |
比較概念 | |
定義於標頭檔案
<experimental/ranges/concepts> | |
定義於名稱空間
std::experimental::ranges | |
指定型別可以在布林上下文中使用 (概念) | |
指定兩個型別可以使用運算子 == 和 != 進行相等比較 (概念) | |
指定運算子 == 是等價關係 (概念) | |
指定型別上的比較運算子產生全序關係 (概念) | |
物件概念 | |
定義於標頭檔案
<experimental/ranges/concepts> | |
定義於名稱空間
std::experimental::ranges | |
指定該型別的物件可以被銷燬 (概念) | |
指定該型別的變數可以從一組引數型別構造或繫結 (概念) | |
指定型別的物件可以預設構造 (概念) | |
指定型別的物件可以被移動構造 (概念) | |
指定型別的物件可以被複制構造和移動構造 (概念) | |
指定型別的物件可以被移動和交換 (概念) | |
指定型別的物件可以被複制、移動和交換 (概念) | |
指定型別的物件可以被複制、移動、交換和預設構造 (概念) | |
指定型別是 regular,即它既是 Semiregular 又是 EqualityComparable (概念) | |
可呼叫概念 | |
定義於標頭檔案
<experimental/ranges/concepts> | |
定義於名稱空間
std::experimental::ranges | |
指定可呼叫型別可以使用給定的一組引數型別進行呼叫 (概念) | |
指定可呼叫型別是布林謂詞 (概念) | |
指定可呼叫型別是二元關係 (概念) | |
指定 Relation 施加嚴格弱序(概念) | |
隨機數生成器概念 | |
定義於標頭檔案
<experimental/ranges/random> | |
定義於名稱空間
std::experimental::ranges | |
指定型別符合統一隨機數生成器 (概念) |
[編輯] 通用工具
實用元件 | |
定義於標頭檔案
<experimental/ranges/utility> | |
定義於名稱空間
std::experimental::ranges | |
交換兩個物件的值 (定製點物件) | |
用新值替換引數並返回其舊值 (函式模板) | |
函式物件 | |
定義於標頭檔案
<experimental/ranges/functional> | |
定義於名稱空間
std::experimental::ranges | |
以給定引數呼叫 Callable 物件 (函式模板) | |
實現 x == y 的函式物件 (類模板) | |
實現 x != y 的函式物件 (類模板) | |
實現 x > y 的函式物件 (類模板) | |
實現 x < y 的函式物件 (類模板) | |
實現 x >= y 的函式物件 (類模板) | |
實現 x <= y 的函式物件 (類模板) | |
返回其引數不變的函式物件 (類) | |
超程式設計和型別特徵 | |
定義於名稱空間
std::experimental::ranges | |
檢查一種型別的物件是否可以與相同或不同型別的物件進行交換 (類模板) | |
確定一組型別的公共引用型別 (類模板) | |
確定一組型別的公共型別 (類模板) | |
帶標籤的對和元組 | |
定義於標頭檔案
<experimental/ranges/utility> | |
定義於名稱空間
std::experimental::ranges | |
指定型別是標籤指定符 (概念) | |
指定型別表示標籤指定符及其元素型別 (概念) | |
使用命名訪問器增強類元組型別 (類模板) | |
帶標籤的 std::pair 的別名模板 (別名模板) | |
用於建立 tagged_pair 的便捷函式(函式模板) | |
定義於標頭檔案
<experimental/ranges/tuple> | |
帶標籤的 std::tuple 的別名模板 (別名模板) | |
用於建立 tagged_tuple 的便捷函式(函式模板) | |
定義於標頭檔案
<experimental/ranges/algorithm> | |
定義於名稱空間
std::experimental::ranges::tag | |
用於 ranges::tagged 的標籤指定符 (類) |
[編輯] 迭代器
定義於標頭檔案
<experimental/ranges/iterator> | |
| |
定義於名稱空間
std::experimental::ranges | |
迭代器概念 | |
指定型別透過應用運算子 * 可讀(概念) | |
指定值可以寫入迭代器引用的物件 (概念) | |
指定 Semiregular 型別可以透過前置和後置增量運算子遞增(概念) | |
指定 WeaklyIncrementable 型別的增量操作是保持相等性,並且該型別是 EqualityComparable (概念) | |
指定型別物件可以被增量和解引用 (概念) | |
指定某個型別的物件是 Iterator 型別的哨兵(概念) | |
指定 - 運算子可以應用於迭代器和哨兵以在常數時間內計算它們的差值(概念) | |
指定型別是一個輸入迭代器,即其引用的值可讀,並且可以進行前置和後置增量 (概念) | |
指定型別是給定值型別的輸出迭代器,即該型別的值可以寫入其中,並且可以進行前置和後置增量 (概念) | |
指定 InputIterator 是一個前向迭代器,支援相等比較和多遍(概念) | |
指定 ForwardIterator 是一個雙向迭代器,支援向後移動(概念) | |
指定 BidirectionalIterator 是一個隨機訪問迭代器,支援常數時間內的前進和下標操作(概念) | |
間接可呼叫概念 | |
指定可呼叫型別可以與解引用 Readable 型別的結果一起呼叫(概念) | |
指定可呼叫物件在與解引用 Readable 型別的結果一起呼叫時,滿足 Predicate (概念) | |
指定可呼叫物件在與解引用某些 Readable 型別的結果一起呼叫時,滿足 Relation (概念) | |
指定可呼叫物件在與解引用某些 Readable 型別的結果一起呼叫時,滿足 StrictWeakOrder (概念) | |
常用演算法要求 | |
指定值可以從 Readable 型別移動到 Writable 型別(概念) | |
指定值可以從 Readable 型別移動到 Writable 型別,並且移動可以透過中間物件執行(概念) | |
指定值可以從 Readable 型別複製到 Writable 型別(概念) | |
指定值可以從 Readable 型別複製到 Writable 型別,並且複製可以透過中間物件執行(概念) | |
指定由兩個 Readable 型別引用的值可以交換(概念) | |
指定由兩個 Readable 型別引用的值可以比較(概念) | |
指定就地重新排序元素的演算法的共同要求 (概念) | |
指定透過複製元素將已排序序列合併到輸出序列中的演算法的要求 (概念) | |
指定將序列排列成有序序列的演算法的共同要求 (概念) | |
概念工具 | |
計算在解引用一組 Readable 型別的結果上呼叫可呼叫物件的結果(類模板) | |
用於指定接受投影的演算法約束的輔助模板 (類模板) | |
迭代器原語 | |
迭代器工具 | |
定義於名稱空間
std::experimental::ranges | |
將解引用物件的結果轉換為其關聯的右值引用型別 (定製點物件) | |
交換兩個可解引用物件引用的值 (定製點物件) | |
迭代器特徵 | |
定義於名稱空間
std::experimental::ranges | |
獲取 WeaklyIncrementable 型別的差值型別(類模板) | |
獲取 Readable 型別的值型別(類模板) | |
獲取輸入迭代器型別的迭代器類別 (類模板) | |
收集迭代器相關型別的相容性特徵類 (別名模板) | |
獲取可解引用物件的關聯引用型別 (別名模板) | |
迭代器類別標籤 | |
定義於名稱空間
std::experimental::ranges | |
用於指示迭代器類別的空類型別 (類) | |
std::iterator_traits 特化 | |
定義於名稱空間
std | |
為 Ranges TS 迭代器特化 std::iterator_traits (類模板特化) | |
迭代器操作 | |
定義於名稱空間
std::experimental::ranges | |
按給定距離前進迭代器 (函式模板) | |
返回迭代器與哨兵之間,或範圍的起始與結束之間的距離 (函式模板) | |
遞增迭代器 (函式模板) | |
遞減迭代器 (函式模板) | |
迭代器介面卡 | |
定義於名稱空間
std::experimental::ranges | |
用於反向遍歷的迭代器介面卡 (類模板) | |
用於在容器末尾插入的迭代器介面卡 (類模板) | |
用於在容器前端插入的迭代器介面卡 (類模板) | |
用於在容器中插入的迭代器介面卡 (類模板) | |
迭代器介面卡,解引用後得到右值引用 (類模板) | |
用於 move_iterator 的哨兵介面卡(類模板) | |
將迭代器-哨兵對適配為通用的迭代器型別,以用於傳統演算法 (類模板) | |
迭代器介面卡,跟蹤其與起始位置的距離 (類模板) | |
空哨兵型別,用於知道其範圍邊界的迭代器型別 (類) | |
可能懸空的迭代器的包裝器 (類模板) | |
別名模板,用 dangling 包裝右值範圍的迭代器型別(別名模板) | |
與任何迭代器一起使用的哨兵型別,表示無限範圍 (類) | |
流迭代器 | |
定義於名稱空間
std::experimental::ranges | |
從std::basic_istream讀取的輸入迭代器 (類模板) | |
寫入std::basic_ostream的輸出迭代器 (類模板) | |
從std::basic_streambuf讀取的輸入迭代器 (類模板) | |
寫入std::basic_streambuf的輸出迭代器 (類模板) |
[編輯] 範圍(Ranges)
定義於標頭檔案
<experimental/ranges/range> | |
範圍概念 (Range concepts) | |
指定型別為範圍,即它提供 begin 迭代器和 end 哨兵(概念) | |
指定範圍在常數時間內知道其大小 (概念) | |
指定範圍是檢視,即它具有常數時間複製/移動/賦值 (概念) | |
指定範圍具有相同的迭代器和哨兵型別 (概念) | |
指定迭代器型別滿足 InputIterator 的範圍(概念) | |
指定迭代器型別滿足 OutputIterator 的範圍(概念) | |
指定迭代器型別滿足 ForwardIterator 的範圍(概念) | |
指定迭代器型別滿足 BidirectionalIterator 的範圍(概念) | |
指定迭代器型別滿足 RandomAccessIterator 的範圍(概念) | |
範圍訪問 | |
定義於名稱空間
std::experimental::ranges | |
返回指向範圍開頭的迭代器 (自定義點物件) | |
返回範圍末尾的迭代器 (自定義點物件) | |
返回指向範圍的反向迭代器 (自定義點物件) | |
返回指向範圍的反向結束迭代器 (自定義點物件) | |
範圍原語 (Range primitives) | |
定義於名稱空間
std::experimental::ranges | |
獲取在常數時間內可計算大小的範圍的大小 (自定義點物件) | |
檢查範圍是否為空 (自定義點物件) | |
獲取指向連續範圍開頭的指標 (自定義點物件) | |
獲取範圍的迭代器和哨兵型別 (別名模板) |
[編輯] 演算法
定義於標頭檔案
<experimental/ranges/algorithm> | |
非修改序列操作 | |
定義於名稱空間
std::experimental::ranges | |
檢查範圍中的所有、任意一個或沒有元素使謂詞為 true (函式模板) | |
對一個範圍的元素應用函式 (函式模板) | |
返回滿足特定條件的元素數量 (函式模板) | |
尋找兩個範圍開始不同的第一個位置 (函式模板) | |
判斷兩組元素是否相同 (函式模板) | |
如果一個範圍在字典上小於另一個範圍,則返回 true (函式模板) | |
尋找第一個滿足特定條件的元素 (函式模板) | |
在特定範圍中尋找最後一次出現的元素序列 (函式模板) | |
搜尋一組元素中的任何一個 (函式模板) | |
尋找第一對相等的(或滿足給定謂詞的)相鄰項 (函式模板) | |
搜尋元素範圍 (函式模板) | |
在範圍中搜索元素的連續複製 (函式模板) | |
修改序列操作 | |
定義於名稱空間
std::experimental::ranges | |
將一個範圍的元素複製到一個新位置 (函式模板) | |
將一定數量的元素複製到一個新位置 (函式模板) | |
以逆序複製一個範圍的元素 (函式模板) | |
將一個範圍的元素移動到一個新位置 (函式模板) | |
以逆序將一個範圍的元素移動到一個新位置 (函式模板) | |
給一個範圍的元素賦某個值 (函式模板) | |
給一定數量的元素賦一個值 (函式模板) | |
對一個範圍的元素應用函式 (函式模板) | |
將一個函式的結果儲存在一個範圍中 (函式模板) | |
儲存 N 次應用一個函式的結果 (函式模板) | |
移除滿足特定標準的元素 (函式模板) | |
複製一個範圍的元素,忽略那些滿足特定條件的元素 (函式模板) | |
用另一個值替換所有滿足特定條件的值 (函式模板) | |
複製一個範圍,同時用另一個值替換滿足特定條件的元素 (函式模板) | |
交換兩個範圍的元素 (函式模板) | |
反轉一個範圍中元素的順序 (函式模板) | |
建立一個反轉後的範圍副本 (函式模板) | |
旋轉一個範圍中元素的順序 (函式模板) | |
複製並旋轉一個範圍的元素 (函式模板) | |
隨機地重排一個範圍中的元素 (函式模板) | |
移除一個範圍中的連續重複元素 (函式模板) | |
建立一個不含連續重複元素的某個元素範圍的副本 (函式模板) | |
劃分操作 | |
定義於名稱空間
std::experimental::ranges | |
判斷一個範圍是否按給定謂詞劃分 (函式模板) | |
將一個範圍的元素分成兩組 (函式模板) | |
複製一個範圍,並將元素分成兩組 (函式模板) | |
將元素分成兩組,同時保留它們的相對順序 (函式模板) | |
定位一個已劃分範圍的劃分點 (函式模板) | |
排序操作 | |
定義於名稱空間
std::experimental::ranges | |
檢查一個範圍是否按升序排序 (函式模板) | |
尋找最大的已排序子範圍 (函式模板) | |
將一個範圍按升序排序 (函式模板) | |
對一個範圍的前 N 個元素進行排序 (函式模板) | |
複製並部分排序一個範圍的元素 (函式模板) | |
對一個範圍的元素進行排序,同時保留相等元素之間的順序 (函式模板) | |
部分排序給定的範圍,確保它被給定的元素劃分 (函式模板) | |
二分查詢操作(在已排序的範圍內) | |
定義於名稱空間
std::experimental::ranges | |
返回一個指向第一個不小於給定值的元素的迭代器 (函式模板) | |
返回一個指向第一個大於某個值的元素的迭代器 (函式模板) | |
確定元素是否存在於某個範圍中 (函式模板) | |
返回與特定鍵匹配的元素範圍 (函式模板) | |
集合操作(於已排序範圍上) | |
定義於名稱空間
std::experimental::ranges | |
歸併兩個已排序的範圍 (函式模板) | |
就地歸併兩個有序範圍 (函式模板) | |
如果一個集合是另一個集合的子集,則返回 true (函式模板) | |
計算兩個集合的差集 (函式模板) | |
計算兩個集合的交集 (函式模板) | |
計算兩個集合的對稱差 (函式模板) | |
計算兩個集合的並集 (函式模板) | |
堆操作 | |
定義於名稱空間
std::experimental::ranges | |
檢查給定的範圍是否是一個最大堆 (函式模板) | |
尋找是一個最大堆的最大子範圍 (函式模板) | |
從一個元素範圍建立一個最大堆 (函式模板) | |
向一個最大堆新增一個元素 (函式模板) | |
從一個最大堆中移除最大的元素 (函式模板) | |
將一個最大堆轉換成一個按升序排序的元素範圍 (函式模板) | |
最小/最大值操作 | |
定義於名稱空間
std::experimental::ranges | |
返回給定值中較大的那個 (函式模板) | |
返回一個範圍中最大的元素 (函式模板) | |
返回給定值中較小的那個 (函式模板) | |
返回一個範圍中最小的元素 (函式模板) | |
返回兩個元素中較小和較大的一個 (函式模板) | |
返回範圍中最小和最大的元素 (函式模板) | |
排列操作 | |
定義於名稱空間
std::experimental::ranges | |
確定一個序列是否是另一個序列的排列 (函式模板) | |
生成元素範圍的下一個更大的字典序排列 (函式模板) | |
生成元素範圍的下一個更小的字典序排列 (函式模板) |