Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::integer_sequence(3)      C++ Standard Libary     std::integer_sequence(3)

NAME
       std::integer_sequence - std::integer_sequence

Synopsis
	  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 para-
       meter pack Ints
	  can be deduced and used in pack expansion.

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

Member types
	  Member type Definition
	  value_type  T

Member functions
	  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)

Parameters
	  (none)

Return value
	  The number of	elements in Ints.

	 Helper	templates

	  A  helper alias template std::index_sequence is defined for the com-
       mon 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_in-
       dex_sequence are
	  defined  to  simplify	creation of std::integer_sequence and std::in-
       dex_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 indi-
       cated type is
	  integer_sequence<T>.

	  A helper alias template std::index_sequence_for is defined  to  con-
       vert 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)>;

Notes
	  Feature-test macro: __cpp_lib_integer_sequence

Example
	  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_in-
       dex_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';
	}

Output:
	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)

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

http://cppreference.com		  2022.07.31	      std::integer_sequence(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::integer_sequence&sektion=3&manpath=FreeBSD+Ports+15.0>

home | help