Tuple

tuple.png

定義

違う型のものを一緒の配列に詰め込めるってこと。
pythonには最初からある
<tuple>(MSDN)
データだけのstructclass作るぐらいだったらこれの方がいいのかなぁ?
これのいいとこって何?
コンテナのpairはタプルと似てるらしい。

利点

  • データだけしか入ってない構造体やクラスの代わりになれる。
  • 関数の戻り値が柔軟になれる

最短サンプル

// tuple.cpp
// compile with: /EHsc
 
#include <vector>
#include <iomanip>
#include <iostream>
#include <tuple>
#include <string>
 
using namespace std;
 
int main( )
{
     tuple <int, double, string,char> miffy(1,10.0,"hi",'A');
     cout<<get<0>(miffy)<<","<<get<1>(miffy)<<","<<get<2>(miffy)<<","<<get<3>(miffy)<<endl;
}

もっと長いサンプル

// tuple.cpp
// compile with: /EHsc
 
#include <vector>
#include <iomanip>
#include <iostream>
#include <tuple>
#include <string>
 
using namespace std;
 
typedef tuple <int, double, string> ids;
 
void print_ids(const ids& i)
{
   cout << "( "
        << get<0>(i) << ", " 
        << get<1>(i) << ", " 
        << get<2>(i) << " )." << endl;
}
 
int main( )
{
   // Using the constructor to declare and initialize a tuple
   ids p1(10, 1.1e-2, "one");
 
   // Compare using the helper function to declare and initialize a tuple
   ids p2;
   p2 = make_tuple(10, 2.22e-1, "two");
 
   // Making a copy of a tuple
   ids p3(p1);
 
   cout.precision(3);
   cout << "The tuple p1 is: ( ";
   print_ids(p1);
   cout << "The tuple p2 is: ( ";
   print_ids(p2);
   cout << "The tuple p3 is: ( ";
   print_ids(p3);
 
   vector<ids> v;
 
   v.push_back(p1);
   v.push_back(p2);
   v.push_back(make_tuple(3, 3.3e-2, "three"));
 
   cout << "The tuples in the vector are" << endl;
   for(vector<ids>::const_iterator i = v.begin(); i != v.end(); ++i)
   {
      print_ids(*i);
   }
}

サポートサイト Wikidot.com