范围扩展

從 cppreference.com


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 施加嚴格弱序
(概念) [編輯]
隨機數生成器概念
在命名空間 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 定義
判斷一個序列是否為另一個序列的排列
(函數模板) [編輯]
產生某個元素範圍的按字典順序的下一個較大的排列
(函數模板) [編輯]
產生某個元素範圍的按字典順序的下一個較小的排列
(函數模板) [編輯]