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が素晴らしすぎる。あと冗長なコンテナを書く必要がなくて見やすいですね。