のんびりしているエンジニアの日記

ソフトウェアなどのエンジニア的な何かを書きます。

C++11 Tuple

Sponsored Links

皆さんこんにちは
お元気ですか。私は元気です。

さて、今日はC++11のTupleと呼ばれる機能について
つまるところこれです。

tuple<int, string, double> tupleValue = make_tuple(10, "test", 9.7);

要は複数のクラスや型のコンテナを生成できます。
今までだと上記のは
pair >と記入する必要があります。ぶっちゃけめんどくさい。

これについて今日は扱っていきます。

ソースコード全体

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

using namespace std;

int main(int argc, char const *argv[]){
	tuple<int, string, double> tupleValue = make_tuple(10, "test", 9.7);
	cout << "Tupleの内容を確認" << endl;
	cout << get<0>(tupleValue) << " " << get<1>(tupleValue) << " " << get<2>(tupleValue) << endl;

	get<0>(tupleValue) = 0;
	get<1>(tupleValue) = "foo";
	get<2>(tupleValue) = 100.0;

	cout << "変更後の内容を確認" << endl;
	cout << get<0>(tupleValue) << " " << get<1>(tupleValue) << " " << get<2>(tupleValue) << endl;

	cout << "数を数えるための関数" << endl;
	size_t count = tuple_size<std::tuple<int, string, double> >::value;
	cout << count << endl;
	count = tuple_size<std::tuple<decltype(tupleValue)> >::value;
	cout << count << endl;

	int a = 100;
	int b = 99.0;
	string c = "bar";

	cout << "変数結合" << endl;
	auto new_taple = tie(a,b,c);

	cout << "Tuple 同士の結合" << endl;
	auto combine_taple = tuple_cat(tupleValue,new_taple);
	
	return 0;
}

tupleの作り方。

tuple<int, string, double> tupleValue = make_tuple(10, "test", 9.7);

普段のコンテナと変わりません。
因みに以下のように書くと楽です。勝手に推論してくれます。というか、これ相性が良すぎですね。

auto tupleValue = make_tuple(10, "test", 9.7);

Tupleのアクセス

get<番目>(tuple)でアクセスを可能とします。

get<0>(tupleValue)
get<1>(tupleValue)
get<2>(tupleValue)

数を数えるとき

型推論が便利な件について

size_t count = tuple_size<std::tuple<int, string, double> >::value;
int count = tuple_size<std::tuple<decltype(tupleValue)>

結合

変数からの結合、tupleとtupleの結合は以下のような形で行うことができます。

int a = 100;
int b = 99.0;
string c = "bar";

cout << "変数結合" << endl;
auto new_taple = tie(a,b,c);

cout << "Tuple 同士の結合" << endl;
auto combine_taple = tuple_cat(tupleValue,new_taple);

感想

autoが素晴らしすぎる。あと冗長なコンテナを書く必要がなくて見やすいですね。