免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
(原創(chuàng))C++11改進(jìn)我們的程序之簡(jiǎn)化我們的程序(七)

(原創(chuàng))C++11改進(jìn)我們的程序之簡(jiǎn)化我們的程序(七)

這次要講的內(nèi)容是:c++11中的tuple(元組)。tuple看似簡(jiǎn)單,其實(shí)它是簡(jiǎn)約而不簡(jiǎn)單,可以說(shuō)它是c++11中一個(gè)既簡(jiǎn)單又復(fù)雜的東東,關(guān)于它簡(jiǎn)單的一面是它很容易使用,復(fù)雜的一面是它內(nèi)部隱藏了太多細(xì)節(jié),要揭開(kāi)它神秘的面紗時(shí)又比較困難。

  tuple是一個(gè)固定大小的不同類型值的集合,是泛化的std::pair。和c#中的tuple類似,但是比c#中的tuple強(qiáng)大得多。我們也可以把他當(dāng)做一個(gè)通用的結(jié)構(gòu)體來(lái)用,不需要?jiǎng)?chuàng)建結(jié)構(gòu)體又獲取結(jié)構(gòu)體的特征,在某些情況下可以取代結(jié)構(gòu)體使程序更簡(jiǎn)潔,直觀。

基本用法

構(gòu)造一個(gè)tuple

tuple<const char*, int>tp = make_tuple(sendPack,nSendSize); //構(gòu)造一個(gè)tuple

這個(gè)tuple等價(jià)于一個(gè)結(jié)構(gòu)體

View Code

用tuple<const char*, int>tp就可以不用創(chuàng)建這個(gè)結(jié)構(gòu)體了,而作用是一樣的,是不是更簡(jiǎn)潔直觀了。還有一種方法也可以創(chuàng)建元組,用std::tie,它會(huì)創(chuàng)建一個(gè)元組的左值引用。

auto tp = return std::tie(1, "aa", 2);//tp的類型實(shí)際是:std::tuple<int&,string&, int&>

再看看如何獲取它的值:

const char* data = tp.get<0>(); //獲取第一個(gè)值int len = tp.get<1>(); //獲取第二個(gè)值

還有一種方法也可以獲取元組的值,通過(guò)std::tie解包tuple

int x,y;string a;std::tie(x,a,y) = tp; 

通過(guò)tie解包后,tp中三個(gè)值會(huì)自動(dòng)賦值給三個(gè)變量。

解包時(shí),我們?nèi)绻幌虢饽硞€(gè)位置的值時(shí),可以用std::ignore占位符來(lái)表示不解某個(gè)位置的值。比如我們只想解第三個(gè)值時(shí):

std::tie(std::ignore,std::ignore,y) = tp; //只解第三個(gè)值了

還有一個(gè)創(chuàng)建右值的引用元組方法:forward_as_tuple。

std::map<int, std::string> m;m.emplace(std::forward_as_tuple(10, std::string(20, 'a')));

它實(shí)際上創(chuàng)建了一個(gè)類似于std::tuple<int&&, std::string&&>類型的tuple。

我們還可以通過(guò)tuple_cat連接多個(gè)tupe

View Code

輸出結(jié)果:

(10, Test, 3.14, Foo, bar, 10, Test, 3.14, 10)

 

  到這里tuple的用法介紹完了,是不是很簡(jiǎn)單,也很容易使用,相信你使用它之后就離不開(kāi)它了。我前面說(shuō)過(guò)tuple是簡(jiǎn)約而不簡(jiǎn)單。它有很多高級(jí)的用法。它和模板元關(guān)系密切,要介紹它的高級(jí)用法的時(shí)候,讀者需要一定的模板元基礎(chǔ),如果你只是把它當(dāng)一個(gè)泛型的pair去使用時(shí),這部分可以不看,如果你想用它高級(jí)用法的時(shí)候就往下看。讓我們要慢慢揭開(kāi)tuple神秘的面紗。

tuple的高級(jí)用法

獲取tuple中某個(gè)位置元素的類型

  通過(guò)std::tuple_element獲取元素類型。

template<typename Tuple>void Fun(Tuple& tp){std::tuple_element<0,Tuple>::type first = std::get<0> (mytuple);std::tuple_element<1,Tuple>::type second = std::get<1> (mytuple);}

遍歷tuple中的每個(gè)元素

  因?yàn)閠uple的參數(shù)是變長(zhǎng)的,也沒(méi)有for_each函數(shù),如果我們想遍歷tuple中的每個(gè)元素,需要自己寫(xiě)代碼實(shí)現(xiàn)。比如我要打印tuple中的每個(gè)元素。

View Code

根據(jù)tuple元素值獲取其對(duì)應(yīng)的索引位置

View Code

展開(kāi)tuple,并將tuple元素作為函數(shù)的參數(shù)。這樣就可以根據(jù)需要對(duì)tuple元素進(jìn)行處理了

View Code

 

  看到這里,想必大家對(duì)tuple有了一個(gè)全面的認(rèn)識(shí)了吧,怎么樣,它是簡(jiǎn)約而不簡(jiǎn)單吧。對(duì)模板元不熟悉的童鞋可以不看tuple高級(jí)用法部分,不要為看不懂而捉急,沒(méi)事的,高級(jí)部分一般用不到,知道基本用法就夠用了。

tuple和vector比較:

vector只能容納同一種類型的數(shù)據(jù),tuple可以容納任意類型的數(shù)據(jù);

vector和variant比較:

二者都可以容納不同類型的數(shù)據(jù),但是variant的類型個(gè)數(shù)是固定的,而tuple的類型個(gè)數(shù)不是固定的,是變長(zhǎng)的,更為強(qiáng)大。

 

c++11 boost技術(shù)交流群:296561497,歡迎大家來(lái)交流技術(shù)。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Tuple 用法詳解
Python zip函數(shù)及用法
第二章Python的List和Tuples
Python基礎(chǔ)入門及學(xué)習(xí)資源
深入Python(一)
Python基礎(chǔ)數(shù)據(jù)類型——tuple淺析 Python進(jìn)階者
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服