C tuple元組的基本用法 總結

2021-09-12 11:15:27 字數 3155 閱讀 1085

1,元組簡介

tuple是乙個固定大小的不同型別值的集合,是泛化的std::pair。我們也可以把他當做乙個通用的結構體來用,不需要建立結構體又獲取結構體的特徵,在某些情況下可以取代結構體使程式更簡潔,直觀。std::tuple理論上可以有無數個任意型別的成員變數,而std::pair只能是2個成員,因此在需要儲存3個及以上的資料時就需要使用tuple元組了。

tuple(元組)在c++11中開始引用的。tuple看似簡單,其實它是簡約而不簡單,可以說它是c++11中乙個既簡單又複雜的東東,關於它簡單的一面是它很容易使用,複雜的一面是它內部隱藏了太多細節,要揭開它神秘的面紗時又比較困難。

2,tuple的建立和初始化

std::tuplet1;            //建立乙個空的tuple物件(使用預設構造),它對應的元素分別是t1和t2...tn型別,採用值初始化。

std::tuplet2(v1, v2, ... tn); //建立乙個tuple物件,它的兩個元素分別是t1和t2 ...tn型別; 要獲取元素的值需要通過tuple的成員get(obj)進行獲取(ith是指獲取在tuple中的第幾個元素,請看後面具體例項)。

std::tuplet3(ref&); // tuple的元素型別可以是乙個引用

std::make_tuple(v1, v2); // 像pair一樣也可以通過make_tuple進行建立乙個tuple物件

tuple的元素型別為引用:

std::string name;

std::tupletpref(name, 30);

// 對tpref第乙個元素賦值,同時name也被賦值 - 引用

std::get<0>(tpref) = "sven";

// name輸出也是sven

std::cout << "name: " << name << '\n';

3,有關tuple元素的操作

等價結構體

開篇講過在某些時候tuple可以等同於結構體一樣使用,這樣既方便又快捷。如:

struct person ;

//可以用tuple來表示這樣的乙個結構型別,作用是一樣的。

std::tuple

2. 如何獲取tuple元素個數

當有乙個tuple物件但不知道有多少元素可以通過如下查詢:

// tuple_size

#include // std::cout

#include // std::tuple, std::tuple_size

int main ()

//輸出結果:

mytuple has 3 elements

3.如何獲取元素的值

獲取tuple物件元素的值可以通過get(obj)方法進行獲取;

ith - 是想獲取的元素在tuple物件中的位置。

obj - 是想獲取tuple的物件

// tuple_size

#include // std::cout

#include // std::tuple, std::tuple_size

int main ()

//輸出結果:

mytuple has 3 elements.

the elements is: 10 a 3.14

tuple不支援迭代,只能通過元素索引(或tie解包)進行獲取元素的值。但是給定的索引必須是在編譯器就已經給定,不能在執行期進行動態傳遞,否則將發生編譯錯誤:

for(int i=0; i<3; i++)

std::cout << std::get(mytuple) << " "; //將引發編譯錯誤

4.獲取元素的型別

要想得到元素型別可以通過tuple_element方法獲取,如有以下元組物件:

std::tupletp("sven", 20);

// 得到第二個元素型別

std::tuple_element<1, decltype(tp)>::type ages;  // ages就為int型別

ages = std::get<1>(tp);

std::cout << "ages: " << ages << '\n';

//輸出結果:

ages: 20

5.利用tie進行解包元素的值

如同pair一樣也是可以通過tie進行解包tuple的各個元素的值。如下tuple物件有4個元素,通過tie解包將會把這4個元素的值分別賦值給tie提供的4個變數中。

#include #include #include int main(int argc, char **ar**) 

//輸出結果:

output:

name: sven, addr: shanghai, ages: 25, areacode: 21

但有時候tuple包含的多個元素時只需要其中的乙個或兩個元素,如此可以通過std::ignore進行變數佔位,這樣將會忽略提取對應的元素。可以修改上述例程:

#include #include #include int main(int argc, char **ar**) 

//輸出結果:

output:

name: sven, addr: , ages: 25, areacode: 110

6. tuple元素的引用

前面已經列舉了將引用作為tuple的元素型別。下面通過引用搭配make_tuple()可以提取tuple的元素值,將某些變數值設給它們,並通過改變這些變數來改變tuple元素的值:

#include #include #include int main(int argc, char **agrv) 

//輸出結果:

before change:

name: sven cheng, weight: 77, f: 66.1

after change:

element 1st: sven, element 2nd: 80, element 3rd: 3.14

C tuple 元組 的實現 原理

c 最新中引入了 tuple,可以定義任意多個型別的物件的組合,關於c tuple 的實現,可以參照如下 例項來理解tuple實現的原理。include using namespace std templateclass tuple template class tuple templateclas...

python 列表 元組的基本用法總結

python列表定義 a 0,1,2,3,4,5,6 b a 0 2 代表從第0個下標開始取到第2個下標數返回給b c a 代表轉殖所有資料給c,這裡應該是值變數,不是引用位址 d a 4 0 1 這個4代表從第4個下標開始,取值到第0個下標中間的數字,並且步長是 1,就是倒序取值,這裡d的值應該是...

python中元組 tuple)用法總結

一 tuple也是乙個class,是不可變的list型別,不可以增刪改。建立 tup1 physics chemistry 1997,2000 tup2 1,2,3,4,5 tup3 a b c d 訪問 與list一樣 tup1 1 5 修改 不可以修改,只能增加新的部分 tup3 tup1 tu...