C++11——多元組類別


二元組(pair)

將兩個元素合成一個對象,聲明:

 類模板 :	template<class T1,class T2> struct pair

使用firstsecond來訪問其中的兩個元素,用make_pair()來構造 。

g_map_file.insert(std::pair<std::string,FILE_INFO>(file_path,file_info));

如果用一個對象來存儲多個元素,依然可以選擇結構體,但是C++ 11提供了一種STL:tuple,多元組。聲明:

template <class ...Types> class tuple;		//可變參數模板
std::tuple <int, double, long &, const char*> test_tuple;
long lengthy = 12;
test_tuple proof(18, 6.5, lengthy, "Ciao!");

lengthy = std::get<0>(proof); 
std::get<3>(proof) = " Beautiful!";

將一個 多元組類別對象賦值給另一個多元組類別對象:

條件:若這兩個多元組類別相同,則其內含的每一個元素其類別都要定義拷貝構造函數;否則的話,賦值操作符右邊的多元組其內含元素的類別必須能轉換成左邊的多元組其對應的元素類別,又或者賦值操作符左邊的多元組其內含元素的類別必須定義適當的構造函數。

std::tuple< int, double, string> t1;
std::tuple< char, short, const char*> t2 ('X', 2, "Hola!");
t1 = t2;		//ok

也可以使用std::make_tuple 構造一個多元組。

std::tie 創建左值引用的 tuple,或將 tuple 解包為獨立對象 。

std::ignore 解包 tuple 時用來跳過元素的占位符 。

auto record = std::make_tuple("Hari Ram", "New Delhi", 3.5, 'A');
std::string name ; float gpa ; char grade ;
std::tie(name, std::ignore, gpa, grade) = record ; 
std::cout << name << ' ' << gpa << ' ' << grade << std::endl ;
std::tuple_size<T>::value		//在編譯時獲得 tuple 的大小
std::tuple_element<I, T>::type	//獲得指定元素的類型


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM