范围扩展
從 cppreference.com
< cpp | experimental
C++ 範圍擴展 (Extensions for Ranges),ISO/IEC TS 21425:2017 指定對核心語言的一項修改,並為 C++ 標準庫定義列於此頁面的新組件。
範圍 TS 基於帶有概念 TS 修改的 C++14 標準。
目錄 |
[編輯] 核心語言更改
範圍 TS 修改基於範圍的 for 循環規定,以容許不同類型的首和尾迭代器。此更改容許使用哨位,並且已存在於 C++17。
[編輯] 概念
核心語言概念 | |
在命名空間
std::experimental::ranges 定義 | |
指定類型與另一類型相同 (概念) | |
指定該類型從另一類型派生 (概念) | |
指定類型能隱式轉換成另一類型 (概念) | |
指定兩個類型共有一個公共引用類型 (概念) | |
指定兩個類型共有一個公共類型 (概念) | |
指定類型為整型類型 (概念) | |
指定類型為有符號的整型類型 (概念) | |
指定類型為無符號的整型類型 (概念) | |
指定類型可從另一類型賦值 (概念) | |
指定一個類型能進行交換,或兩個類型能彼此交換 (概念) | |
比較概念 | |
在命名空間
std::experimental::ranges 定義 | |
指定類型能用於布爾語境 (概念) | |
指定兩個類型能用運算符 == 和 != 比較相等性 (概念) | |
指定運算符 == 是等價關係 (概念) | |
指定該類型上的比較運算符產出全序 (概念) | |
對象概念 | |
在命名空間
std::experimental::ranges 定義 | |
指定該類型對象能被銷毀,且能用一元 & 取其地址 (概念) | |
指定該類型的變量能從一組實參類型進行構造,或綁定到一組實參類型 (概念) | |
指定該類型對象能默認構造 (概念) | |
指定該類型的對象能移動構造 (概念) | |
指定該類型對象能複製構造及移動構造 (概念) | |
指定該類型的對象能被移動和交換 (概念) | |
指定該類型對象能被複制、移動和交換 (概念) | |
指定類型的對象能被複制、移動、交換及默認構造 (概念) | |
指定類型為正則,即為 Semiregular 且為 EqualityComparable (概念) | |
可調用概念 | |
在命名空間
std::experimental::ranges 定義 | |
指定可調用類型能以給定的一組實參調用 (概念) | |
指定可調用類型是布爾謂詞 (概念) | |
指定可調用類型為二元關係 (概念) | |
指定一種 Relation 施加嚴格弱序 (概念) | |
隨機數生成器概念 | |
在標頭
<experimental/ranges/random> 定義 | |
在命名空間
std::experimental::ranges 定義 | |
指定類型具備作為均勻隨機數生成器的資格 (概念) |
[編輯] 通用工具
工具組件 | |
在命名空間
std::experimental::ranges 定義 | |
交換兩個對象的值 (定製點對象) | |
以新值替換實參並返回其先前的值 (函數模板) | |
函數對象 | |
在命名空間
std::experimental::ranges 定義 | |
以給定實參調用可調用 (Callable) 對象 (函數模板) | |
實現 x == y 的函數對象 (類模板) | |
實現 x != y 的函數對象 (類模板) | |
實現 x > y 的函數對象 (類模板) | |
實現 x < y 的函數對象 (類模板) | |
實現 x >= y 的函數對象 (類模板) | |
實現 x <= y 的函數對象 (類模板) | |
返回其(未改變的)實參的函數對象 (類) | |
元編程與類型特徵 | |
在命名空間
std::experimental::ranges 定義 | |
檢查一個類型的對象是否能與相同或不同類型的對象交換 (類模板) | |
確定類型集合的公共引用類型 (類模板) | |
確定類型集合的公共類型 (類模板) | |
有標籤的 pair 與 tuple | |
在命名空間
std::experimental::ranges 定義 | |
指定類型為標籤說明符 (概念) | |
指定類型表示一個標籤說明符及其元素類型 (概念) | |
為元組式類型增加具名訪問器 (類模板) | |
有標籤 std::pair 的別名模版 (別名模板) | |
用於創建 tagged_pair 的便利函數 (函數模板) | |
在標頭
<experimental/ranges/tuple> 定義 | |
有標籤 std::tuple 的別名模版 (別名模板) | |
用於創建 tagged_tuple 的便利函數 (函數模板) | |
在命名空間
std::experimental::ranges::tag 定義 | |
用於 ranges::tagged 的標籤說明符 (類) |
[編輯] 迭代器
迭代器相關概念 | |
在命名空間
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 定義 | |
為範圍 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 的輸出迭代器 (類模板) |
[編輯] 範圍
在標頭
<experimental/ranges/range> 定義 | |
範圍概念 | |
指定類型為範圍,即它提供 begin 迭代器和 end 哨位 (概念) | |
指定範圍以常數時間知曉其大小 (概念) | |
指定範圍為視圖,即它擁有常數時間的複製/移動/賦值 (概念) | |
指定範圍擁有等同的迭代器和哨位類型 (概念) | |
指定範圍的迭代器滿足 InputIterator (概念) | |
指定範圍的迭代器滿足 OutputIterator (概念) | |
指定範圍的迭代器滿足 ForwardIterator (概念) | |
指定範圍的迭代器滿足 BidirectionalIterator (概念) | |
指定範圍的迭代器滿足 RandomAccessIterator (概念) | |
範圍訪問 | |
在命名空間
std::experimental::ranges 定義 | |
返回指向範圍起始的迭代器 (定製點對象) | |
返回指向範圍末尾的迭代器 (定製點對象) | |
獲得指向範圍的逆向迭代器 (定製點對象) | |
獲得指向範圍的逆向尾迭代器 (定製點對象) | |
範圍原語 | |
在命名空間
std::experimental::ranges 定義 | |
獲得能在常數時間計算大小的範圍的大小 (定製點對象) | |
檢查範圍是否為空 (定製點對象) | |
獲得指向連續範圍起始的指針 (定製點對象) | |
獲得範圍的迭代器類型與哨位類型 (別名模板) |
[編輯] 算法
不修改序列的操作 | |
在命名空間
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 定義 | |
判斷一個序列是否為另一個序列的排列 (函數模板) | |
產生某個元素範圍的按字典順序的下一個較大的排列 (函數模板) | |
產生某個元素範圍的按字典順序的下一個較小的排列 (函數模板) |