Пространства имён
Варианты
Действия

Заголовочный файл стандартной библиотеки <tuple> (C++11)

Материал из cppreference.com
< cpp‎ | header
 
 
Заголовочные файлы стандартной библиотеки
Языковая поддержка
Концепты
<concepts> (C++20)
Диагностика
<system_error> (C++11)

Управление памятью
<memory_resource> (C++17)  
Метапрограммирование
<type_traits> (C++11)
<ratio> (C++11)
Общие утилиты
<utility>
<tuple> (C++11)
<optional> (C++17)
<variant> (C++17)
<any> (C++17)
<expected> (C++23)
<bitset>

<charconv> (C++17)
<format> (C++20)
<bit> (C++20)

Строки
<cuchar> (C++11)

Контейнеры
<flat_set> (C++23)
<span> (C++20)
<mdspan> (C++23)

Итераторы
<iterator>
Диапазоны
<ranges> (C++20)
<generator> (C++23)
Алгоритмы
Числа
<cfenv> (C++11)
<complex>
<numbers> (C++20)

Время
<chrono> (C++11)
Локализация
<codecvt> (C++11/17*)
Ввод/вывод
<filesystem> (C++17)
<cstdio>
<cinttypes> (C++11)
<strstream> (C++98*)
Регулярные выражения
<regex> (C++11)
Поддержка конкуренции
<stop_token> (C++20)
<thread> (C++11)
<atomic> (C++11)
<stdatomic.h> (C++23)
<mutex> (C++11)
<shared_mutex> (C++14)
<condition_variable> (C++11)  
<semaphore> (C++20)
<latch> (C++20)
<barrier> (C++20)
<future> (C++11)

Совместимость с C
<cstdbool> (C++11/17/20*)  
<ccomplex> (C++11/17/20*)
<ctgmath> (C++11/17/20*)

<cstdalign> (C++11/17/20*)

<ciso646> (до C++20)

 

Этот заголовок является частью библиотеки общих утилит.

Содержание

Включает

(C++20)
Поддержка оператора трёхстороннего сравнения [править]

Классы

(C++11)
реализует контейнер фиксированного размера, который содержит элементы, возможно, разных типов
(шаблон класса) [править]
получает количество элементов tuple подобного типа
(шаблон класса) [править]
получает типы элементов tuple подобного типа
(шаблон класса) [править]
получает размер tuple во время компиляции
(специализация шаблона класса) [править]
получает тип указанного элемента
(специализация шаблона класса) [править]
специализация свойств типа std::uses_allocator
(специализация шаблона класса) [править]

Константы

(C++11)
заполнитель для пропуска элемента при распаковке tuple с помощью tie
(константа) [править]

Функции

создаёт объект tuple типа, определённого типами аргументов
(шаблон функции) [править]
создаёт tuple левосторонних ссылок или распаковывает кортеж на отдельные объекты
(шаблон функции) [править]
создаёт tuple пересылалаемых ссылок
(шаблон функции) [править]
(C++11)
создаёт tuple, объединяя любое количество кортежей
(шаблон функции) [править]
доступ к определённому элементу кортежа
(шаблон функции) [править]
(удалено в C++20)(удалено в C++20)(удалено в C++20)(удалено в C++20)(удалено в C++20)(C++20)
лексикографически сравнивает значения в кортеже
(шаблон функции) [править]
специализация алгоритма std::swap
(шаблон функции) [править]
(C++17)
вызывает функцию с кортежем аргументов
(шаблон функции) [править]
создаёт объект с кортежем аргументов
(шаблон функции) [править]

[править] Краткое описание

#include <compare>
 
namespace std {
  // шаблонный класс tuple
  template<class... Types>
    class tuple;
 
  // функции создания tuple
  inline constexpr /* не определено */ ignore;
 
  template<class... TTypes>
    constexpr tuple<unwrap_ref_decay_t<TTypes>...> make_tuple(TTypes&&...);
 
  template<class... TTypes>
    constexpr tuple<TTypes&&...> forward_as_tuple(TTypes&&...) noexcept;
 
  template<class... TTypes>
    constexpr tuple<TTypes&...> tie(TTypes&...) noexcept;
 
  template<class... Tuples>
    constexpr tuple<CTypes...> tuple_cat(Tuples&&...);
 
  // вызов функции с tuple в качестве аргументов
  template<class F, class Tuple>
    constexpr decltype(auto) apply(F&& f, Tuple&& t);
 
  template<class T, class Tuple>
    constexpr T make_from_tuple(Tuple&& t);
 
  // вспомогательные классы для tuple
  template<class T> struct tuple_size;                  // не определено
  template<class T> struct tuple_size<const T>;
 
  template<class... Types> struct tuple_size<tuple<Types...>>;
 
  template<size_t I, class T> struct tuple_element;     // не определено
  template<size_t I, class T> struct tuple_element<I, const T>;
 
  template<size_t I, class... Types>
    struct tuple_element<I, tuple<Types...>>;
 
  template<size_t I, class T>
    using tuple_element_t = typename tuple_element<I, T>::type;
 
  // доступ к элементам
  template<size_t I, class... Types>
    constexpr tuple_element_t<I, tuple<Types...>>& get(tuple<Types...>&) noexcept;
  template<size_t I, class... Types>
    constexpr tuple_element_t<I, tuple<Types...>>&& get(tuple<Types...>&&) noexcept;
  template<size_t I, class... Types>
    constexpr const tuple_element_t<I, tuple<Types...>>&
      get(const tuple<Types...>&) noexcept;
  template<size_t I, class... Types>
    constexpr const tuple_element_t<I, tuple<Types...>>&&
      get(const tuple<Types...>&&) noexcept;
  template<class T, class... Types>
    constexpr T& get(tuple<Types...>& t) noexcept;
  template<class T, class... Types>
    constexpr T&& get(tuple<Types...>&& t) noexcept;
  template<class T, class... Types>
    constexpr const T& get(const tuple<Types...>& t) noexcept;
  template<class T, class... Types>
    constexpr const T&& get(const tuple<Types...>&& t) noexcept;
 
  // операторы отношения
  template<class... TTypes, class... UTypes>
    constexpr bool operator==(const tuple<TTypes...>&, const tuple<UTypes...>&);
  template<class... TTypes, class... UTypes>
    constexpr common_comparison_category_t</*synth-three-way-result*/<TTypes, UTypes>...>
      operator<=>(const tuple<TTypes...>&, const tuple<UTypes...>&);
 
  // свойства, связанные с аллокатором
  template<class... Types, class Alloc>
    struct uses_allocator<tuple<Types...>, Alloc>;
 
  // специализированные алгоритмы
  template<class... Types>
    constexpr void
      swap(tuple<Types...>& x, tuple<Types...>& y) noexcept(/* смотрите описание */);
 
  // вспомогательные классы для tuple
  template<class T>
    inline constexpr size_t tuple_size_v = tuple_size<T>::value;
}
 
// устарело
namespace std {
  template<class T> class tuple_size<volatile T>;
  template<class T> class tuple_size<const volatile T>;
 
  template<size_t I, class T> class tuple_element<I, volatile T>;
  template<size_t I, class T> class tuple_element<I, const volatile T>;
}

[править] Шаблонный класс std::tuple

namespace std {
  template<class... Types>
  class tuple {
  public:
    // создание tuple
    constexpr explicit(/* смотрите описание */) tuple();
    constexpr explicit(/* смотрите описание */)
      tuple(const Types&...);         // только если sizeof...(Types) >= 1
    template<class... UTypes>
      constexpr explicit(/* смотрите описание */)
        tuple(UTypes&&...);           // только если sizeof...(Types) >= 1
 
    tuple(const tuple&) = default;
    tuple(tuple&&) = default;
 
    template<class... UTypes>
      constexpr explicit(/* смотрите описание */) tuple(const tuple<UTypes...>&);
    template<class... UTypes>
      constexpr explicit(/* смотрите описание */) tuple(tuple<UTypes...>&&);
 
    template<class U1, class U2>
      constexpr explicit(/* смотрите описание */)
        tuple(const pair<U1, U2>&);   // только если sizeof...(Types) == 2
    template<class U1, class U2>
      constexpr explicit(/* смотрите описание */)
        tuple(pair<U1, U2>&&);        // только если sizeof...(Types) == 2
 
    // конструкторы, расширенные аллокатором
    template<class Alloc>
      constexpr explicit(/* смотрите описание */)
        tuple(allocator_arg_t, const Alloc& a);
    template<class Alloc>
      constexpr explicit(/* смотрите описание */)
        tuple(allocator_arg_t, const Alloc& a, const Types&...);
    template<class Alloc, class... UTypes>
      constexpr explicit(/* смотрите описание */)
        tuple(allocator_arg_t, const Alloc& a, UTypes&&...);
    template<class Alloc>
      constexpr tuple(allocator_arg_t, const Alloc& a, const tuple&);
    template<class Alloc>
      constexpr tuple(allocator_arg_t, const Alloc& a, tuple&&);
    template<class Alloc, class... UTypes>
      constexpr explicit(/* смотрите описание */)
        tuple(allocator_arg_t, const Alloc& a, const tuple<UTypes...>&);
    template<class Alloc, class... UTypes>
      constexpr explicit(/* смотрите описание */)
        tuple(allocator_arg_t, const Alloc& a, tuple<UTypes...>&&);
    template<class Alloc, class U1, class U2>
      constexpr explicit(/* смотрите описание */)
        tuple(allocator_arg_t, const Alloc& a, const pair<U1, U2>&);
    template<class Alloc, class U1, class U2>
      constexpr explicit(/* смотрите описание */)
        tuple(allocator_arg_t, const Alloc& a, pair<U1, U2>&&);
 
    // присваивание tuple
    constexpr tuple& operator=(const tuple&);
    constexpr tuple& operator=(tuple&&) noexcept(/* смотрите описание */);
 
    template<class... UTypes>
      constexpr tuple& operator=(const tuple<UTypes...>&);
    template<class... UTypes>
      constexpr tuple& operator=(tuple<UTypes...>&&);
 
    template<class U1, class U2>
      constexpr tuple& operator=(const pair<U1, U2>&); // только если sizeof...(Types) == 2
    template<class U1, class U2>
      constexpr tuple& operator=(pair<U1, U2>&&);      // только если sizeof...(Types) == 2
 
    // обмен tuple
    constexpr void swap(tuple&) noexcept(/* смотрите описание */);
  };
 
  template<class... UTypes>
    tuple(UTypes...) -> tuple<UTypes...>;
  template<class T1, class T2>
    tuple(pair<T1, T2>) -> tuple<T1, T2>;
  template<class Alloc, class... UTypes>
    tuple(allocator_arg_t, Alloc, UTypes...) -> tuple<UTypes...>;
  template<class Alloc, class T1, class T2>
    tuple(allocator_arg_t, Alloc, pair<T1, T2>) -> tuple<T1, T2>;
  template<class Alloc, class... UTypes>
    tuple(allocator_arg_t, Alloc, tuple<UTypes...>) -> tuple<UTypes...>;
}