std::ranges::views::iota, std::ranges::iota_view, std::ranges::views::indices - cppreference.com

Defined in header

<ranges>

template<std::weakly_incrementableW,std::semiregularBound=std::unreachable_sentinel_t>requires/*weakly-equality-comparable-with*/<W,Bound>&&std::copyable<W>classiota_view:publicranges::view_interface<iota_view<W,Bound>> (1) (since C++20)namespaceviews{inlineconstexpr/* unspecified */iota=/* unspecified */;} (2) (since C++20)namespaceviews{inlineconstexpr/* unspecified */indices=/* unspecified */;} (3)(since C++26)Call signature

template<classW>requires/* see below */constexpr/* see below */iota(W&&value);(since C++20)template<classW,classBound>requires/* see below */constexpr/* see below */iota(W&&value,Bound&&bound);(since C++20)template<classT>requires/*is-integer-like*/<T>constexpr/* see below */indices(Tbound);(since C++26)1) A range factory that generates a sequence of elements by repeatedly incrementing an initial value. Can be either bounded or unbounded (infinite).

2)views::iota(e) and views::iota(e,f) are

expression-equivalent

to iota_view<std::decay_t<decltype((e))>>(e) and iota_view(e,f) respectively for any suitable subexpressions e and f.

3) Let T be std::remove_cvref_t<decltype((e))>. Then views::indices(e) is

expression-equivalent

to views::iota(T(0),e) for any suitable subexpression e if T is an

integer-like type

.

Customization point objects

The name views::iota denotes a customization point object, which is a const

function object

of a

literal

semiregular

class type. See

CustomizationPointObject

for details.

Data members

Member Description Wvalue_the beginning value
(exposition-only member object*)Boundbound_the sentinel value, may be unreachable
(exposition-only member object*)Member functions

(constructor)

creates an iota_view
(public member function)

begin

obtains the beginning iterator of an iota_view
(public member function)

end

obtains the sentinel denoting the end of an iota_view
(public member function)

empty

tests whether the iota_view is empty (i.e. the iterator and the sentinel compare equal)
(public member function)

size

(optional)

obtains the size of an iota_view (only provided if it is bounded)
(public member function) Inherited from

std::ranges::view_interface

cbegin

(C++23)

returns a constant iterator to the beginning of the range
(public member function of std::ranges::view_interface<D>)

[edit]

cend

(C++23)

returns a sentinel for the constant iterator of the range
(public member function of std::ranges::view_interface<D>)

[edit]

operator bool

returns whether the derived view is not empty, provided only if

ranges::empty

is applicable to it
(public member function of std::ranges::view_interface<D>)

[edit]

front

returns the first element in the derived view, provided if it satisfies

forward_range

(public member function of std::ranges::view_interface<D>)

[edit]

back

returns the last element in the derived view, provided only if it satisfies

bidirectional_range

and

common_range

(public member function of std::ranges::view_interface<D>)

[edit]

operator[]

returns the nth element in the derived view, provided only if it satisfies

random_access_range

(public member function of std::ranges::view_interface<D>)

[edit]

Deduction guides

Nested classes

the iterator type
(exposition-only member class*)the sentinel type used when the iota_view is bounded and Bound and W are not the same type
(exposition-only member class*)Helper templates

template<std::weakly_incrementableW,std::semiregularBound>constexprboolranges::enable_borrowed_range<ranges::iota_view<W,Bound>>=true;(since C++20)This specialization of ranges::enable_borrowed_range makes iota_view satisfy

borrowed_range

.

Possible implementation

See also the implementation in

libstdc++

.

views::indices (3)

namespaceviews{inlineconstexprautoindices=[]</*is-integer-like*/I>(In){returnviews::iota(I{},n);};}Notes

Feature-test

macro ValueStdFeature

__cpp_lib_ranges_indices

202506L

(C++26)ranges::views::indicesExample

Run this code

#include<print>#include<ranges>structBound{intbound;booloperator==(intx)const{returnx==bound;}};intmain(){std::print("{}\n",std::ranges::iota_view{1,10});std::print("{}\n",std::views::iota(1,10));std::print("{}\n",std::views::iota(1,Bound{10}));std::print("{}\n",std::views::iota(1)|std::views::take(9));constexprintv[]{9,8,7,6,5,4,3,2,1};// auto broken_indices = views::iota(0, std::ranges::size(v));// does not compile due to types (int VS size_t) mismatchautogood_indices=std::views::indices(std::ranges::size(v));std::print("{}\n",good_indices);}Output:

[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] [0, 1, 2, 3, 4, 5, 6, 7, 8] Defect reports

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

DR Applied to Behavior as published Correct behavior

LWG 4096

C++20 views::iota could copy an iota_view as-is forbidden

P2325R3

C++20 iota_view required that W is

semiregular

as

view

required

default_initializable

only requires that W is

copyable

References

C++26 standard (ISO/IEC 14882:2026):

25.6.4 Iota view [range.iota]

C++23 standard (ISO/IEC 14882:2024):

26.6.4 Iota view [range.iota]

C++20 standard (ISO/IEC 14882:2020):

24.6.4 Iota view [range.iota]

See also