名稱空間
變體
操作

std::ranges::views::iota, std::ranges::iota_view

來自 cppreference.com
< cpp‎ | ranges
 
 
範圍庫 (Ranges library)
範圍介面卡 (Range adaptors)
 
 
定義於標頭檔案 <ranges>
template< std::weakly_incrementable W,

          std::semiregular Bound = std::unreachable_sentinel_t >
    requires /*weakly-equality-comparable-with*/<W, Bound> && std::copyable<W>
class iota_view

    : public ranges::view_interface<iota_view<W, Bound>>
(1) (C++20 起)
namespace views {

    inline constexpr /* unspecified */ iota = /* unspecified */;

}
(2) (C++20 起)
呼叫簽名 (Call signature)
template< class W >

    requires /* 見下文 */

constexpr /* see below */ iota( W&& value );
(C++20 起)
template< class W, class Bound >

    requires /* 見下文 */

constexpr /* see below */ iota( W&& value, Bound&& bound );
(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) 表示式等價,對於任何合適的子表示式 ef

目錄

自定義點物件

名稱 views::iota 表示一個定製點物件,它是一個 const 函式物件,其型別是一個 字面量 semiregular 類型別。為了方便說明,其 cv 非限定版本型別表示為 __iota_fn

__iota_fn 的所有例項都是相等的。在相同引數上呼叫 __iota_fn 型別的不同例項的效果是等價的,無論表示例項的表示式是左值還是右值,以及是否帶有 const 限定符(然而,volatile 限定的例項不要求可呼叫)。因此,views::iota 可以自由複製,其副本可以互換使用。

給定一組型別 Args...,如果 std::declval<Args>()... 滿足上述 views::iota 引數的要求,則 __iota_fn 滿足

否則,__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_rangecommon_range 時才提供
(std::ranges::view_interface<D> 的公共成員函式) [編輯]
返回派生檢視中的第 n 個元素,僅當它滿足 random_access_range 時提供
(std::ranges::view_interface<D> 的公共成員函式) [編輯]

[編輯] 推導指南

[編輯] 巢狀類

迭代器型別
(僅用於說明的成員類*)
iota_view 有界且 BoundW 型別不同時使用的哨兵型別
(僅用於說明的成員類*)

[編輯] 幫助模板

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 要求 Wsemiregular
因為 view 要求 default_initializable
僅要求 Wcopyable

[編輯] 參閱

(C++11)
以起始值的連續增量填充一個範圍
(函式模板) [編輯]
以起始值的連續增量填充一個範圍
(演算法函式物件)[編輯]
一個由重複生成相同值組成的view
(類模板) (定製點物件)[編輯]