Skip to content

Latest commit

 

History

History
154 lines (116 loc) · 4.57 KB

tuple.md

File metadata and controls

154 lines (116 loc) · 4.57 KB

tuple

  • tuple[meta header]
  • std[meta namespace]
  • class template[meta id-type]
  • cpp11[meta cpp]
namespace std {
  template <class... Args>
  class tuple;
}

概要

tuple型は、複数の型の値を保持する「タプル」を表現するためのクラスである。

pair型は2つの型の値を保持する「組」を表現することができるが、tupleではN個の型の値を扱うことができる。

メンバ関数

名前 説明 対応バージョン
(constructor) コンストラクタ C++11
operator= 代入演算子 C++11
swap 異なるtupleオブジェクトと値を入れ替える C++11

非メンバ関数

タプル生成関数

名前 説明 対応バージョン
ignore 無視する要素のプレースホルダー(constant variable) C++11
make_tuple 引数のコピーからタプルを生成する C++11
forward_as_tuple 引数の完全な型からタプルを生成する C++11
tie 引数への参照からタプルを生成する C++11
tuple_cat 複数のタプルから1つのタプルを生成する C++11

要素アクセス

名前 説明 対応バージョン
get tuplei番目の要素を参照する C++11

入れ替え

名前 説明 対応バージョン
swap 2つのtupleオブジェクトを入れ替える C++11

関係演算子

名前 説明 対応バージョン
operator== 等値判定を行う C++11
operator!= 非等値判定を行う C++11
operator< 左辺が右辺よりも小さいか判定を行う C++11
operator<= 左辺が右辺以下か判定を行う C++11
operator> 左辺が右辺より大きいか判定を行う C++11
operator>= 左辺が右辺以上か判定を行う C++11

推論補助

名前 説明 対応バージョン
(deduction_guide) クラステンプレートの推論補助 C++17

基本的な使い方 (C++11)

#include <iostream>
#include <tuple>
#include <string>

int main()
{
  // 3要素のタプルを作る
  std::tuple<int, char, std::string> t = std::make_tuple(1, 'a', "hello");

  // 0番目の要素を参照
  int& i = std::get<0>(t);
  std::cout << i << std::endl;

  // 2番目の要素を参照
  std::string& s = std::get<2>(t);
  std::cout << s << std::endl;
}
  • std::tuple[color ff0000]
  • std::get[link tuple/get.md]
  • std::make_tuple[link make_tuple.md]

出力

1
hello

基本的な使い方 (C++17)

#include <iostream>
#include <tuple>
#include <string>

// 関数から複数の値を返す
std::tuple<int, char, std::string> f()
{
  // std::make_tuple()はほとんどの状況で必要ない
  return {1, 'a', "hello"};
}

int main()
{
  // 構造化束縛でタプルを分解して、それぞれの要素を代入
  auto [a, b, c] = f();

  std::cout << a << std::endl;
  std::cout << b << std::endl;
  std::cout << c << std::endl;
}
  • std::make_tuple[link make_tuple.md]

出力

1
a
hello

バージョン

言語

  • C++11

処理系

関連項目

参照