C++ Primer 5th笔记(chap 17 标准库特殊设施)tuple 类型
生活随笔
收集整理的這篇文章主要介紹了
C++ Primer 5th笔记(chap 17 标准库特殊设施)tuple 类型
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 定義
將一些數據組合成單一對象(類似pair)
tuple支持的操作
| tuple<T1, T2, …, Tn> t; | t是一個tuple,成員數為n,第i個成員的類型是Ti所有成員都進行值初始化。 |
| tuple<T1, T2, …, Tn> t(v1, v2, …, vn); | 每個成員用對應的初始值vi進行初始化。此構造函數是explicit的。 |
| make_tuple(v1, v2, …, vn) | 返回一個用給定初始值初始化的tuple。tuple的類型從初始值的類型推斷。 |
| t1 == t2 | 當兩個tuple具有相同數量的成員且成員對應相等時,兩個tuple相等。 |
| t1 relop t2 | tuple的關系運算使用字典序。兩個tuple必須具有相同數量的成員。 |
| get(t) | 返回t的第i個數據成員的引用:如果t是一個左值,結果是一個左值引用;否則,結果是一個右值引用。tuple的所有成員都是public的。 |
| tuple_size::value | 一個類模板,可以通過一個tuple類型來初始化。它有一個名為value的public constexpr static數據成員,類型為size_t,表示給定tuple類型中成員的數量。 |
| tuple_element<i, tupleType>::type | 一個類模板,可以通過一個整型常量和一個tuple類型來初始化。它有一個名為type的public成員,表示給定tuple類型中指定成員的類型。 |
1.1 定義和初始化tuple
定義和初始化示例:
tuple<size_t, size_t, size_t> threeD;/ / 三個成員都設置為 0 tuple<size_t, size_t, size_t> threeD{1,2,3}; tuple<size_t, size_t, size_t> threeD = {1,2,3};//errortuple<string, vector<double>, int, list<int>> someVal ( "constants", { 3.14 , 2.718 } , 42, { 0,1, 2, 3, 4, 5 } )auto item = make_tuple("0-999-78345-X", 3, 2.00); tem 是一個 tuple, 類型為 tuple<const char *, int, double>1.2 訪問tuple的成員
要訪問tuple的成員,使用一個名為get的標準庫函數模板,同時傳遞給get一個tuple對象,其返回指定成員的引用
auto book = get<0>(item); //返回item的第一個成員 auto book = get<1>(item); //返回item的第二個成員 auto book = get<2>(item)/cnt; //返回item的最后一個成員 get<2>(item) *= 0.8; //打折20%1.3 decltype
不知道一個 tuple 準確的類型細節信息, 可以用兩個輔助類模板來查詢 tuple成員的數量和類型:
typedef decltype (item) trans; / / trans 是 item的類型1.4 tuple_size
tuple_size 有一個名為 value 的public static 數據成員, 它表示給定 tuple中成員的數量。
/ / 返回 trans 類型對象中成員的數量 size_t sz= tuple_size<trans>::value;//返回31.5 tuple_element
tuple_element 模板除了一個 tuple 類型外, 還接受一個索引值。 它有一個名為 type 的 public 類型成員, 表示給定 tuple 類型中指定成員的類型。
/ / cnt 的類型與 item 中第二個成員相同 tuple_element<1, trans>::type cnt = get<1> (item) ; // cnt 是一個 int1.6 關系和相等運算符
只有兩個 tuple 具有相同數量的成員時,才可以比較
tuple<string, string> duo ( "1", "2" } ; tuple<size_t, size_t> twoD (1, 2 ) ; bool b (duo == twoD) ; / / 錯誤: 不能比較 size_t 和 string tuple<size_t, size_t, size_t> threeD(1, 2, 3); b = ( twoD < threeD) ; //錯誤: 成員數量不同 tuple<size_t, size_t> origin (0, 0); b = (origin < twoD); //正確:b為true總結
以上是生活随笔為你收集整理的C++ Primer 5th笔记(chap 17 标准库特殊设施)tuple 类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ Primer 5th笔记(cha
- 下一篇: C++ Primer 5th笔记(cha