名稱空間
變體
操作

Ranges 擴充套件

來自 cppreference.com
< cpp‎ | 實驗性

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 的函式物件
(類模板) [編輯]
返回其引數不變的函式物件
(類) [編輯]
超程式設計和型別特徵
定義於標頭檔案 <experimental/ranges/type_traits>
定義於名稱空間 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
確定一個序列是否是另一個序列的排列
(函式模板) [編輯]
生成元素範圍的下一個更大的字典序排列
(函式模板) [編輯]
生成元素範圍的下一個更小的字典序排列
(函式模板) [編輯]