std::tuple
阿新 • • 發佈:2018-08-04
我們 code 想要 span 連接 cat 頭文件 pla 成了
tuple,元組類型。頭文件<tuple>,
tuple是一個固定大小的不同類型(異質,heterogeneous)值的集合(這一點是tuple與其他常規STL容器的最大不同,即它可以同時存放不同類型的數據)。
泛化的std::pair(也即std::pair是tuple的一個特例,長度受限為2)。
當我們定義一個std::tuple時,需要指出每個成員的類型, std::tuple<int, std::string> tu{ 2,"12iop" };
1、希望將一些數據組合成單一對象,但又不想麻煩地定義一個新數據結構來表示這些數據時,std::tuple是非常有用的。我們可以將std::tuple看作一個”快速而隨意”的數據結構。
2、創建一個std::tuple對象時,可以使用tuple的默認構造函數,它會對每個成員進行值初始化;也可以為每個成員提供一個初始值,此時的構造函數是explicit的,因此必須使用直接初始化方法。
3、一個std::tuple類型的成員數目是沒有限制的,因此,tuple的成員都是未命名的。要訪問一個tuple的成員,就要使用一個名為get的標準庫函數模板。為了使用get,我們必須指定一個顯式模板實參,它指出我們想要訪問第幾個成員get<0>。
make_tuple: 用於創建tuple
1 auto tup1 = std::make_tuple("Hello World!View Code", ‘a‘, 3.14, 0); 2 3 std::tuple<int, char> sixth(std::make_pair(30, ‘c‘)); 4 std::cout << "sixth contains: " << std::get<0>(sixth);
tie: 用於拆開tuple
1 auto tup1 = std::make_tuple(3.14, 1, ‘a‘); 2 double a; 3 int b; 4 char c; 5 std::tie(a, b, c) = tup1;View Code
ignore:如果不想要某一位的值,可以直接將其用ignore代替。
1 std::tie(ignore, b, c) = tup1;
View Code
forward_as_tuple: 用於接受右值引用數據生成tuple
1 auto tup2 = std::forward_as_tuple(1, "hello"); 2 創建了一個tuple<int &&, char (&)[6]>類型的元組。tuple中的參數全部為右值引用。而前面討論的tie函數就只能接受左值。View Code
tuple_cat: 用於連接tuple
1 std::tuple<float, string> tup1(3.14, "pi"); 2 std::tuple<int, char> tup2(10, ‘a‘); 3 auto tup3 = tuple_cat(tup1, tup2); 4 將tup1和tup2連起來就成了tup3。View Code
std::tuple