std::ranges::views::elements, std::ranges::elements_view
定義於標頭檔案 <ranges> |
||
template< ranges::input_range V, std::size_t N > requires ranges::view<V> && |
(1) | (C++20 起) |
namespace views { template< std::size_t N > |
(2) | (C++20 起) |
呼叫簽名 (Call signature) |
||
template< ranges::viewable_range R > requires /* 見下文 */ |
(C++20 起) | |
輔助概念 |
||
(3) | ||
template< class T, std::size_t N > concept /*has-tuple-element*/ = |
(直至 C++23) (僅作說明*) |
|
template< class T, std::size_t N > concept /*has-tuple-element*/ = |
(C++23 起) (僅作說明*) |
|
template< class T, std::size_t N > concept returnable-element = |
(4) | (僅作說明*) |
views::elements
的每個特化都是一個 RangeAdaptorObject。對於任何合適的子表示式 e 和常量表達式 M,表示式 views::elements<M>(e) 在表示式等價於 elements_view<views::all_t<decltype((e))>, M>{e}。當底層檢視 V
滿足相應的概念時,elements_view
滿足概念 random_access_range
、bidirectional_range
、forward_range
、input_range
、common_range
和 sized_range
。
目錄 |
[編輯] 資料成員
成員名稱 (Member name) | 定義 |
base_ (私有) |
型別為 V 的底層(已適配)檢視(僅用於闡釋的成員物件*) |
[編輯] 成員函式
構造一個 elements_view (public 成員函式) | |
返回底層(適配)檢視的副本 (public 成員函式) | |
返回指向起始的迭代器 (public 成員函式) | |
返回一個迭代器或一個哨兵到末尾 (public 成員函式) | |
返回元素數量,僅當底層(適配的)範圍滿足 sized_range 時提供(public 成員函式) | |
繼承自 std::ranges::view_interface | |
如果派生檢視滿足 sized_range 或 forward_range ,則返回派生檢視是否為空( std::ranges::view_interface<D> 的 public 成員函式) | |
(C++23) |
返回範圍開頭的常量迭代器 ( std::ranges::view_interface<D> 的 public 成員函式) |
(C++23) |
返回範圍常量迭代器的哨兵 ( std::ranges::view_interface<D> 的 public 成員函式) |
返回派生檢視是否非空,僅當 ranges::empty 適用於它時提供 ( std::ranges::view_interface<D> 的 public 成員函式) | |
返回派生檢視中的第一個元素,如果它滿足 forward_range 則提供( std::ranges::view_interface<D> 的 public 成員函式) | |
如果派生檢視滿足 bidirectional_range 和 common_range ,則返回派生檢視中的最後一個元素( std::ranges::view_interface<D> 的 public 成員函式) | |
返回派生檢視中的第 n 個元素,僅當它滿足 random_access_range 時提供( std::ranges::view_interface<D> 的 public 成員函式) |
[編輯] 巢狀類
迭代器型別 (僅用於說明的成員類模板*) | |
哨兵型別 (僅用於說明的成員類模板*) |
[編輯] 輔助模板
template<class T, std::size_t N> constexpr bool enable_borrowed_range<std::ranges::elements_view<T, N>> = |
(C++20 起) | |
此 ranges::enable_borrowed_range 的特化使得 elements_view
在底層檢視滿足 borrowed_range
時也滿足該概念。
[編輯] 示例
#include <iostream> #include <ranges> #include <string> #include <tuple> #include <vector> int main() { const std::vector<std::tuple<int, char, std::string>> vt { {1, 'A', "α"}, {2, 'B', "β"}, {3, 'C', "γ"}, {4, 'D', "δ"}, {5, 'E', "ε"}, }; for (int const e : std::views::elements<0>(vt)) std::cout << e << ' '; std::cout << '\n'; for (char const e : vt | std::views::elements<1>) std::cout << e << ' '; std::cout << '\n'; for (std::string const& e : std::views::elements<2>(vt)) std::cout << e << ' '; std::cout << '\n'; }
輸出
1 2 3 4 5 A B C D E α β γ δ ε
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
LWG 3494 | C++20 | elements_view 從未是 borrowed_range |
它是 borrowed_range 如果其底層檢視是 |
LWG 3502 | C++20 | 從 elements_view 可能會獲得懸空引用 |
禁止此類用法 |
[編輯] 參閱
(C++20) |
接受一個由類似對的值組成的view ,並生成一個由每對的第一個元素組成的view (類模板) (range 介面卡物件) |
接受一個由類似對的值組成的view ,並生成一個由每對的第二個元素組成的view (類模板) (range 介面卡物件) | |
(C++23) |
一個由引用到適配檢視對應元素的元組組成的 view (類模板) (定製點物件) |
一個由轉換函式應用於適配檢視中對應元素的結果組成的 view (類模板) (定製點物件) | |
valarray 的類 BLAS 切片:起始索引、長度、步長 (類) |