std::ranges::views::iota, std::ranges::iota_view
來自 cppreference.com
定義於標頭檔案 <ranges> |
||
template< std::weakly_incrementable W, std::semiregular Bound = std::unreachable_sentinel_t > |
(1) | (C++20 起) |
namespace views { inline constexpr /* unspecified */ iota = /* unspecified */; |
(2) | (C++20 起) |
呼叫簽名 (Call signature) |
||
template< class W > requires /* 見下文 */ |
(C++20 起) | |
template< class W, class Bound > requires /* 見下文 */ |
(C++20 起) | |
1) 一個透過重複遞增初始值來生成元素序列的 range factory。可以是有限的或無限的。
2) views::iota(e) 和 views::iota(e, f) 分別與 iota_view<std::decay_t<decltype((e))>>(e) 和 iota_view(e, f) 表示式等價,對於任何合適的子表示式 e 和 f。
目錄 |
自定義點物件
名稱 views::iota
表示一個定製點物件,它是一個 const 函式物件,其型別是一個 字面量 semiregular
類型別。為了方便說明,其 cv 非限定版本型別表示為 __iota_fn
。
__iota_fn
的所有例項都是相等的。在相同引數上呼叫 __iota_fn
型別的不同例項的效果是等價的,無論表示例項的表示式是左值還是右值,以及是否帶有 const 限定符(然而,volatile 限定的例項不要求可呼叫)。因此,views::iota
可以自由複製,其副本可以互換使用。
給定一組型別 Args...
,如果 std::declval<Args>()... 滿足上述 views::iota
引數的要求,則 __iota_fn
滿足
- std::invocable<__iota_fn, Args...>,
- std::invocable<const __iota_fn, Args...>,
- std::invocable<__iota_fn&, Args...>,以及
- std::invocable<const __iota_fn&, Args...>.
否則,__iota_fn
的任何函式呼叫運算子都不參與過載決議。
[編輯] 資料成員
成員 | 定義 |
W value_ |
起始值 (僅用於闡釋的成員物件*) |
Bound bound_ |
哨兵值,可能無法到達 (僅用於闡釋的成員物件*) |
[編輯] 成員函式
建立一個 iota_view (公開成員函式) | |
獲取 iota_view 的起始迭代器(公開成員函式) | |
獲取表示 iota_view 結束的哨兵(公開成員函式) | |
測試 iota_view 是否為空(即迭代器和哨兵比較相等)(公開成員函式) | |
(可選) |
獲取 iota_view 的大小(僅在它有界時提供)(公開成員函式) |
繼承自 std::ranges::view_interface | |
(C++23) |
返回範圍開頭的常量迭代器 ( std::ranges::view_interface<D> 的公共成員函式) |
(C++23) |
返回範圍常量迭代器的哨兵 ( std::ranges::view_interface<D> 的公共成員函式) |
返回派生檢視是否非空,僅當 ranges::empty 適用於它時提供 ( std::ranges::view_interface<D> 的公共成員函式) | |
返回派生檢視中的第一個元素,如果它滿足 forward_range 則提供( std::ranges::view_interface<D> 的公共成員函式) | |
返回派生檢視中的最後一個元素,僅當它滿足 bidirectional_range 和 common_range 時才提供( std::ranges::view_interface<D> 的公共成員函式) | |
返回派生檢視中的第 n 個元素,僅當它滿足 random_access_range 時提供( std::ranges::view_interface<D> 的公共成員函式) |
[編輯] 推導指南
[編輯] 巢狀類
迭代器型別 (僅用於說明的成員類*) | |
當 iota_view 有界且 Bound 和 W 型別不同時使用的哨兵型別(僅用於說明的成員類*) |
[編輯] 幫助模板
template< std::weakly_incrementable W, std::semiregular Bound > constexpr bool ranges::enable_borrowed_range<ranges::iota_view<W, Bound>> = true; |
(C++20 起) | |
ranges::enable_borrowed_range
的此特化使得 iota_view
滿足 borrowed_range
。
[編輯] 示例
執行此程式碼
#include <algorithm> #include <iostream> #include <ranges> struct Bound { int bound; bool operator==(int x) const { return x == bound; } }; int main() { for (int i : std::ranges::iota_view{1, 10}) std::cout << i << ' '; std::cout << '\n'; for (int i : std::views::iota(1, 10)) std::cout << i << ' '; std::cout << '\n'; for (int i : std::views::iota(1, Bound{10})) std::cout << i << ' '; std::cout << '\n'; for (int i : std::views::iota(1) | std::views::take(9)) std::cout << i << ' '; std::cout << '\n'; std::ranges::for_each(std::views::iota(1, 10), [](int i){ std::cout << i << ' '; }); std::cout << '\n'; }
輸出
1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
LWG 4096 | C++20 | views::iota 可以按原樣複製 iota_view |
已禁止 |
P2325R3 | C++20 | iota_view 要求 W 為 semiregular 因為 view 要求 default_initializable |
僅要求 W 為 copyable |
[編輯] 參閱
(C++11) |
以起始值的連續增量填充一個範圍 (函式模板) |
(C++23) |
以起始值的連續增量填充一個範圍 (演算法函式物件) |
一個由重複生成相同值組成的view (類模板) (定製點物件) |