C 11新特性tuple多元陣列

2021-08-10 01:52:27 字數 1477 閱讀 8046

tuple是c++ 11新的標準庫之一,其表示n元陣列,它相當於有n個成員的結構體,只不過這個結構體的成員都是匿名的。tuple是類似於pair的模板,tuple像是pair的泛化版本,pair只能存放兩個成員,而tuple則可以多個成員,相同的是,pair和tuple都允許其成員的型別不一樣。

tuple的最常見的用途就是作為函式的返回值,利用它,可以實現函式返回多個值。(雖然c++通過結構體也可以實現返回多個值得能力,但是相對tuple來說會更繁瑣一些。)

tuple testtuple1;//新建tuple型別

tuple testtuple2(1,2.0,"test");//新建tuple型別的變數,其型別為tuple

auto testtuple3=make_tuple("test2",123,3.14);//通過初值來初始化tuple,其型別從初值的型別中推斷。

與pair採用first和second來獲取元素不同,因為tuple的元素個數是不固定的,所以不能用這種方式,tuple的成員都是未命名的,要訪問乙個tuple成員,需要使用名為get的標準庫函式模板,既然是函式模板,就需要制定它的模板實參,

需要注意的是,get< n>(type)中的n需要時常量表示式,而不能是變數。

auto str=get

<0>(testtuple3);//訪問第乙個元素,注意從0開始,

auto int_v=get

<1>(testtuple3);//訪問第二個元素。

get<2>(testtuple3)=2.0;//更改第三個元素的值。

獲取tuple的元素個數的方法

size_t sz=tupe_size::value;//返回3
tupe_size< tupletype >::value 是乙個類模板。

獲取tuple型別第i個元素的資料型別:

// tuple_element::type 是類模板,返回第i個元素的資料型別。

cout

<::type

<

兩個tuple變數可以直接進行比較大小,但是也有前提的。其需要滿足兩個條件:

1. 兩個tuple具有相同數量的成員數目。

2. 兩個tuple的每對成員使用==運算子都是合法的(相等與否),如果是關係運算子,則每對成員的《是合法的。

bool b=(testtuple1==testtuple2);

bool b=(testtuple2另外,由於tuple定義了< 和 ==運算子,那麼我們就可以將tuple系列傳給排序演算法。並且在無序容器中,可以將tuple變數作為關鍵字型別。

tupleget_tuple()

auto tp=get_tuple();

cout<0>(tp)<1>(tp)<2>(tp)<

C 11新特性學習

lambda表示式用於建立匿名的函式物件,語法為 函式可訪問的的外部變數 函式引數 返回值型別 如 int a 1,b 2 int c b int x int b 表示函式中可以訪問外部變數b,而且引數b是按值傳遞,b 表示引數b是按引用傳遞,表示可以訪問所有外部變數,並且是用按值傳遞方式,類似,也...

C 11 新特性試用

在c 11之前,auto關鍵字用來指定儲存期。在新標準中,它的功能變為型別推斷。auto現在成了乙個型別的佔位符,通知編譯器去根據初始化 推斷所宣告變數的真實型別。各種作用域內宣告變數都可以用到它。例如,名空間中,程式塊中,或是for迴圈的初始化語句中。auto i 42 i is an int a...

C 11 新特性總結

vs2012以上版本支援 一.auto的使用 auto func less 自動表示函式指標 auto ite vector a.begin 自動表示stl的迭代器 auto p new foo 自動表示變數指標等變數 二.decltype int x 3 decltype x y x 從變數或表示...