iota_view
class (C++標準連結庫)
藉由重複遞增初始值,產生元素序列的檢視。 序列可以系結或未繫結。
語法
template<std::weakly_incrementable W, std::semiregular Bound = std::unreachable_sentinel_t>
requires __WeaklyEqualityComparableWith<W, Bound> && std::copyable<W>
class iota_view : public ranges::view_interface<iota_view<W, Bound>>;
範本參數
W
序列中值的型別。 指定的型別必須支援 operator++
。
Bound
結束值的型別。 如果 Bound
為 std::unreachable_sentinel_t
(預設值),則檢視會取消系結。
檢視特性
如需下列專案的描述,請參閱 檢視類別特性
特性 | 描述 |
---|---|
範圍配接器 | views::iota |
基礎範圍 | 不適用,因為此檢視會產生其成員 |
項目類型 | 與範本參數相同 W |
檢視反覆運算器類別 | 根據 的型別,最多random_access_range 支援 input_range 。W |
大小 | 只有當範圍具有結束值時,也就是它不是無限數列 |
為 const -iterable |
Yes |
通用範圍 | Bound 只有當 類型與 相同時W |
借用範圍 | Yes |
成員
成員函式 | 說明 |
---|---|
建構函式C++20 | 建構檢視。 |
begin C++20 |
取得第一個專案的反覆運算器。 |
end C++20 |
取得檢視結尾的 sentinel。 |
size C++20 |
取得項目數目。 |
繼承自 view_interface |
說明 |
back C++20 |
取得最後一個專案。 |
empty C++20 |
測試檢視是否為空白。 |
front C++20 |
取得第一個專案。 |
operator[] C++20 |
取得位於指定位置的專案。 |
operator bool C++20 |
測試檢視是否不是空的。 |
備註
建立的好方法是 iota_view
使用 iota
範圍配接器。 範圍配接器是建立檢視類別的預定方式。 如果您想要建立自己的自定義檢視類型,則會公開檢視類型。
值序列可以是範圍中的整數值,例如 1,2,3 或 'a'、'b'、'c' 或連續元素。
此檢視通常用於逐一查看一系列值。 例如:
for (int i : iota_view{1, 10}) // iterate over a view of the integers 1 through 9
{
std::cout << i << ' '; // 1 2 3 4 5 6 7 8 9
}
需求
標頭: <ranges>
(自C++20起)
命名空間:std::ranges
需要編譯程式選項:/std:c++20
或更新版本。
建構函式
建立的 iota_view
實例。
1) iota_view() requires std::default_initializable<W> = default;
2) constexpr explicit iota_view(W value);
3) constexpr iota_view(std::type_identity_t<W> value, std::type_identity_t<Bound> bound);
4) constexpr iota_view( /*iterator*/ first, /*sentinel*/ last );
參數
value
數列的起始值。
bound
數列的系結。 其大於數列中最後一個值。
如需範本參數類型的相關信息,請參閱 範本參數。
備註
1) 使用預設初始化的樣本類型 W
所決定的起始和結束值來建立 iota_view
。
2) 使用 iota_view
值初始化型 W
別 所決定的指定起始值和結束值建立 。
3) 建立具有 iota_view
指定起始值和結束值的限定。 結束值小於最後一個指定的值。
4) 用來建立子檢視。 例如, std::ranges::iota_view(start, end);
其中 start
和 end
是子檢視開始和結尾的反覆運算器。
建立的簡單方式 iota_view
不是直接建立這個類別,而是使用 iota
範圍配接器。 範圍配接器是建立檢視類別的預定方式。 如果您想要建立自己的自定義檢視類型,則會公開檢視類型。
如果系結的類型為 unreachable_sentinel_t
,則產生的檢視會系結。
當您使用其中一個值初始化系結的建構函式時,系結會是該型別的預設初始化值。 例如,是的空白範圍int
,iota_view<int, int>{}
因為預設建構的 int 值和系結都是 0
。 此外, iota_view<int, int>{-4}
是因為 -4, -3, -2, -1
預設建構的 int
系結是 0
。
iota_view
建構函式範例
// requires /std:c++20, or later
#include <ranges>
#include <iostream>
#include <vector>
int main()
{
std::ranges::iota_view<int> iv; // create an iota_view with an unbounded range, starting at 0
std::ranges::iota_view<int> iv2(5); // create an iota_view with an unbounded range, starting at 5.
std::ranges::iota_view<int, int> iv3{5, 10}; // create an iota_view with a bounded range, starting at 5 and ending at 9
std::vector<int> v{10, 20, 35, 45, 50, 66, 77, 82, 90, 100};
auto start = std::ranges::find(v, 35);
auto end = std::ranges::find(v, 82);
for (auto &&val : std::ranges::iota_view(start, end))
{
std::cout << *val << ' '; // outputs 35 45 50 66 77
}
}
begin
取得檢視中第一個專案的反覆運算器。
constexpr auto begin();
constexpr auto begin() const requires range<const V>;
參數
無。
傳回值
指向檢視中第一個專案的反覆運算器。
end
取得檢視結尾的 sentinel。
constexpr auto end();
constexpr auto end() const requires ranges::range<const V>;
參數
無。
傳回值
iota_view
如果未繫結,則傳std::unreachable_sentinel
回 。
iota_view
如果 系結 ,則會傳回反覆運算器,指向序列中最後一個值之後的 sentinel。
size
取得檢視中的項目數目。 iota_view
必須繫結 。
constexpr auto size() requires
(same_as<W, Bound> && advanceable <W>) ||
(integral<W> && integral<Bound>) ||
sized_sentinel_for<Bound, W>;
參數
無。
傳回值
iota_view
中的項目數。
備註
您無法在未繫結iota_view
的 上呼叫 size()
。