Namespaces
Variants

Standard library header <tuple> (C++11)

From cppreference.net
Standard library headers

此头文件属于 通用工具 库。

<td

目录

包含文件

(C++20)
三路比较运算符 支持

(C++11)
实现固定大小容器,可容纳可能不同类型的元素
(类模板)
(C++11)
获取元组类类型的元素数量
(类模板)
获取元组类类型的元素类型
(类模板)
获取

tuple 的大小
(类模板特化)

获取指定元素的类型
(类模板特化)
特化 std::uses_allocator 类型特征
(类模板特化)

常量

(C++11)
在使用 tie 解包 tuple 时跳过元素的占位符
(常量)

函数

(C++11)
根据参数类型创建 tuple 对象
(函数模板)
(C++11)
创建左值引用的 tuple 或将元组解包为独立对象
(函数模板)
创建 转发引用 tuple
(函数模板)
(C++11)
通过连接任意数量的元组创建 tuple
(函数模板)
访问元组的指定元素
(函数模板)
(C++20 中移除) (C++20 中移除) (C++20 中移除) (C++20 中移除) (C++20 中移除) (C++20)
按字典序比较元组中的值
(函数模板)
特化 std::swap 算法
(函数模板)

概要

#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</* 合成三路比较结果 */<TTypes, UTypes>...>
      operator<=>(const tuple<TTypes...>&, const tuple<UTypes...>&);
  // 分配器相关特性
  template<class... 

类模板 std::tuple

namespace std {
  template<class... Types>
  class tuple {
  public:
    // 元组构造
    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>&&);
    // 元组赋值
    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>
      <span