tuple表示乙個不定數量的資料組,對比pair,表示兩個元素的對組,tuple就像是pair的擴充套件。可以指定多個不同性質的元素,使其成為乙個資料組,然後像使用乙個變數一樣,使用tuple物件。
首先,使用tuple時,我們需要包含標頭檔案:
#include
我們先看看如何宣告乙個tuple變數:
tuple<
int,
float
,double
,char
, string> t;
以上宣告了乙個tuple型別的變數,其中包含五種型別的元素,包括int,float,double,char,string。
也可以使用自動型別推導auto 結合 make_tuple()介面,直接賦值,宣告乙個tuple變數:
auto t =
make_tuple(1
,2.2
,3.33
);
在宣告變數之後,如果要提取變數中的元素,我們需要使用get關鍵字來獲取tuple中的元素。因為tuple並非stl中的容器,所以不存在迭代器讓我們遍歷提取其中的元素值。
get是c++11新推出的關鍵字,類似於使用pair中的first/second
get的使用方式如下:索引值從0開始,代表了tuple變數中的資料位置,後面括號內是tuple變數名稱。
get《索引值》
(tuple變數)
;
關於get的使用**如下:
auto t =
make_tuple(1
,2.2
,3.33);
cout << get<
0>
(t)<< endl;
// 1
cout << get<
1>
(t)<< endl;
// 2.2
cout << get<
2>
(t)<< endl;
// 3.33
另外,也可以使用get來修改tuple中的變數,修改方式如下:
auto t =
make_tuple(1
,2.2
,3.33);
get<
0>
(t)=
100;
// 1 -> 100
get<
1>
(t)=
200.222
;// 2.2 -> 200.222
get<
2>
(t)=
300.333
;// 3.33 -> 300.333
1、swap()
使用swap()可以互換兩個tuple變數的資料。使用方式如下:
auto t1 =
make_tuple(1
,2.2
,3.33);
auto t2 =
make_tuple(2
,3.3
,4.44);
t1.swap
(t2)
;// 交換元素值
swap
(t1, t2)
;// 交換元素值,包含標頭檔案
2、tie()
tie()介面的功能是建立乙個具有reference性質的tuple變數,也就是對tuple中元素的修改,會改變所引用的變數值。
使用場景如下:
int
main()
函式執行結果如下:
v1 =
100v2 =
200.222
v3 = string change
另外,如果只想將tuple中的某一項宣告為引用的話,可以使用std::ref() 介面來實現,使用如下:
int v1 =10;
string v2 =
"string test"
;auto i =
make_tuple
(v1, std::
ref(v2));
// 只將v2宣告為引用的形式
get<
1>
(i)=
"string changed"
;// 對tuple中第2個變數的修改也就是v2的修改
cout <<
"v2 = "
<< v2 << endl;
// v2 = string changed
3、tuple_cat()
使用tuple_cat()可以將多個tuple變數連線成為乙個tuple變數,類似於拼接字串一樣的處理,只不過此處處理的是多個tuple變數,使用方式如下:
int
main()
tuple可以和pair直接進行轉換賦值:
例如,宣告tuple變數時,直接以pair變數為初始值;或者直接將pair變數賦值給tuple,至於將tuple變數賦值給pair,是不可以直接進行賦值的,這種情況暫時不做討論。
pair<
int,
double
>p(
1,2.2)
;auto i =
make_tuple
(p);
// 使用pair來初始化tuple
i = p;
// 使用pair來為tuple賦值
p = i;
// error 不可以直接賦值
最後,如果使用get的時候,傳入無效的索引值,或越界的索引值,編譯器會進行報錯提示。
謝謝閱讀。
Python函式返回不定數量的值
python的函式是可以return多個值的,但其本質上還是返回單個值,只是利用了tuple的自動打包,將多個值打包成單個tuple返回。使用 驗證 def func a return 1,2,3,4 if name main temp func a print type temp 執行結果,確認返...
Python中的不定數量的函式引數
首先並不是必須寫成 args 和 kwargs。只有變數前面的 星號 才是必須的,不過更建議使用這兩個名字,可以讓別的程式設計師更容易理解。args是用來傳送乙個非鍵值對的可變數量的引數列表給乙個函式。def var args f arg,args print first arg f arg for...
如何使用 C 中的 Tuple
開局一張圖,首先宣告的是 tuple 不是什麼新鮮概念,在程式語言 f python 中早就有這個了,tuple 是一種 有序的,有限不可變的,支援混雜型別的固定個數的 一種資料結構,有些朋友可能就想問了,這裡的混雜是什麼意思?其實就是說 tuple 中的若干元素型別,即可以是同型別,也可以是不同型...