1. 程式人生 > >std::tuple

std::tuple

我們 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!
", 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);
View Code

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