C 11 14介紹(四) 新增容器(三)

2021-09-25 23:04:58 字數 1223 閱讀 5530

傳統c++中的容器,除了std::pair外,沒有現成的資料結構能用來存放不同型別的資料,但是std::pair的缺陷是只能儲存;兩個元素。

元組的使用有三個核心的函式:

//在c++14下執行

#include #include auto get_student(int id)

int main()

std::get除了使用常量獲取元組物件外,c++14增加了使用型別來獲取元組中的物件:

#include #include int main()

結果:

123

6.7

std::get<> 依賴乙個編譯期的常量,所以下面的方式是不合法的:

int index = 1;

std::get(t);

處理方式:

//c++17

#include template boost::variant_tuple_index(size_t i, const std::tuple& tpl)

template boost::varianttuple_index(size_t i, const std::tuple& tpl)

這樣就可以:

int i = 1;

std::cout << tuple_index(i, t) << std::endl;

通過 std::tuple_cat 來實現:

auto new_tuple = std::tuple_cat(get_student(1), std::move(t));
馬上就能夠發現,應該如何快速遍歷乙個元組?但是剛才介紹了如何在執行期通過非常數索引乙個 tuple,那麼遍歷就變得簡單了,首先需要知道乙個元組的長度,可以:

template auto tuple_len(t &tpl)
這樣就可以對元組進行迭代了:

// 迭代

for(int i = 0; i != tuple_len(new_tuple); ++i)

// 執行期索引

std::cout << tuple_index(i, new_tuple) << std::endl;

C 11 14介紹(四) 新增容器(一)

std array會在編譯時建立乙個固定大小的陣列,std array不能夠被隱式的轉換成指標,使用std array很簡單,只需指定其型別和大小即可 std arrayarr int len 4 std arrayarr 非法,陣列大小引數必須是常量表示式將其相容c風格的介面 void foo i...

C 11 14介紹(八) 其他雜項

long long int 並不是 c 11 最先引入的,其實早在 c99,long long int 就已經被納入 c 標準中,所以大部分的編譯器早已支援。c 11 的工作則是正式把它納入標準庫,規定了乙個 long long int 型別至少具備 64 位的位元數。c 相比於 c 的一大優勢就在...

JMeter 四 介紹HTTP協議相關配置元件

背景介紹 http協議仍是網際網路工作中的大部分內容,jmeter也是全力支撐,滿足各種http測試條件。1 http cookie manager cookie是瀏覽器產生的,用來儲存使用者資訊的 該屬性管理器用於管理test plan執行時的所有cookie。http cookie manage...