GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
std::integer_sequence(3) C++ Standard Libary std::integer_sequence(3)

std::integer_sequence - std::integer_sequence


Defined in header <utility>
template< class T, T... Ints > (since C++14)
class integer_sequence;


The class template std::integer_sequence represents a compile-time sequence of
integers. When used as an argument to a function template, the parameter pack Ints
can be deduced and used in pack expansion.


T - an integer type to use for the elements of the sequence
...Ints - a non-type parameter pack representing the sequence


Member type Definition
value_type T


size returns the number of elements in Ints
[static] (public static member function)

std::integer_sequence::size


static constexpr std::size_t size() noexcept;


Returns the number of elements in Ints. Equivalent to sizeof...(Ints)


(none)


The number of elements in Ints.


Helper templates


A helper alias template std::index_sequence is defined for the common case where T
is std::size_t:


template<std::size_t... Ints>
using index_sequence = std::integer_sequence<std::size_t, Ints...>;


Helper alias templates std::make_integer_sequence and std::make_index_sequence are
defined to simplify creation of std::integer_sequence and std::index_sequence types,
respectively, with 0, 1, 2, ..., N-1 as Ints:


template<class T, T N>
using make_integer_sequence = std::integer_sequence<T, /* a sequence 0, 1, 2, ...,
N-1 */ >;
template<std::size_t N>
using make_index_sequence = std::make_integer_sequence<std::size_t, N>;


The program is ill-formed if N is negative. If N is zero, the indicated type is
integer_sequence<T>.


A helper alias template std::index_sequence_for is defined to convert any type
parameter pack into an index sequence of the same length:


template<class... T>
using index_sequence_for = std::make_index_sequence<sizeof...(T)>;


Feature-test macro: __cpp_lib_integer_sequence


Note: see Possible Implementation in std::apply for another example.

// Run this code


#include <tuple>
#include <iostream>
#include <array>
#include <utility>


// debugging aid
template<typename T, T... ints>
void print_sequence(std::integer_sequence<T, ints...> int_seq)
{
std::cout << "The sequence of size " << int_seq.size() << ": ";
((std::cout << ints << ' '), ...);
std::cout << '\n';
}


// convert array into a tuple
template<typename Array, std::size_t... I>
auto a2t_impl(const Array& a, std::index_sequence<I...>)
{
return std::make_tuple(a[I]...);
}


template<typename T, std::size_t N, typename Indices = std::make_index_sequence<N>>
auto a2t(const std::array<T, N>& a)
{
return a2t_impl(a, Indices{});
}


// pretty-print a tuple
template<class Ch, class Tr, class Tuple, std::size_t... Is>
void print_tuple_impl(std::basic_ostream<Ch,Tr>& os,
const Tuple& t,
std::index_sequence<Is...>)
{
((os << (Is == 0? "" : ", ") << std::get<Is>(t)), ...);
}


template<class Ch, class Tr, class... Args>
auto& operator<<(std::basic_ostream<Ch, Tr>& os,
const std::tuple<Args...>& t)
{
os << "(";
print_tuple_impl(os, t, std::index_sequence_for<Args...>{});
return os << ")";
}


int main()
{
print_sequence(std::integer_sequence<unsigned, 9, 2, 5, 1, 9, 1, 6>{});
print_sequence(std::make_integer_sequence<int, 20>{});
print_sequence(std::make_index_sequence<10>{});
print_sequence(std::index_sequence_for<float, std::iostream, char>{});


std::array<int, 4> array = {1, 2, 3, 4};


// convert an array into a tuple
auto tuple = a2t(array);
static_assert(std::is_same_v<decltype(tuple),
std::tuple<int, int, int, int>>, "");


// print it to cout
std::cout << "The tuple: " << tuple << '\n';
}


The sequence of size 7: 9 2 5 1 9 1 6
The sequence of size 20: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
The sequence of size 10: 0 1 2 3 4 5 6 7 8 9
The sequence of size 3: 0 1 2
The tuple: (1, 2, 3, 4)


to_array creates a std::array object from a built-in array
(C++20) (function template)

2022.07.31 http://cppreference.com

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.