STL Containers

容器的共性

1空郊,所有容器中元素都是值而不是引用,元素插入容器的時(shí)候容器拷貝或移動(dòng)元素切揭,即元素必須能夠被拷貝或移動(dòng)狞甚。但也可以存儲(chǔ)元素的指針來避免拷貝。

2廓旬,容器中的元素都是有特定順序的哼审,不管是不是有序或無序容器,只要沒有進(jìn)行插入和刪除操作孕豹,利用迭代器遍歷多次得到的順序是一樣的涩盾。

3,STL本身一般不拋出異常

Req表示容器通用的操作

移動(dòng)迭代器

std::vector<std::string> c(std::make_move_iterator(l.begin()),std::make_move_iterator(l.end()));

獲取數(shù)組迭代器

int arr;

std::begin(arr)励背,std::end(arr)

流迭代器

std::deque<int> c((std::istream_iterator<int>(std::cin)),(std::istream_iterator<int>()));

All containers except vectors and deques guarantee that iterators and references to elements remain valid if other elements are deleted. For vectors, only the elements before the point of erase remain valid.

If you remove all elements by using clear(), for vectors, deques, and strings any past-the-end iterator returned by end() or cend() may become invalid.

If you insert elements, only lists, forward lists, and associative containers guarantee that iterators and references to elements remain valid. For vectors, this guarantee is given if insertions don’t exceed the capacity. For unordered containers, that guarantee is given to references in general but to iterators only when no rehashing happens, which is guaranteed as long as with insertions the number of resulting elements is less than the bucket count times the maximum load factor.

容器通用類型

Arrays

類array<>定義在<array>春霍,為普通的靜態(tài)數(shù)組提供容器的操作,未提供參數(shù)為初始值列表的構(gòu)造函數(shù)和賦值操作叶眉,但提供了移動(dòng)操作

std::array<int, 5> ?coll = { 42, 377, 611, 21, 44 };

array的元素是連續(xù)存儲(chǔ)的

std::array<char, 41>a; // create static array of 41 chars

strcpy(a.data(),"hello, world"); // copy a C-string into the array

printf("%s\n", a.data()); // print contents of the array as C-string

array提供tuple接口

typedef std::array<std::string, 5> ?FiveStrings;

FiveStrings a = { "hello", "nico", "how", "are", "you" };

std::tuple_size<FiveStrings>::value // yields 5

std::tuple_element<1,FiveStrings>::type // yields std::string

std::get<1>(a) // yields std::string("nico")

// negate all elements

transform(a.begin(),a.end(), a.begin(),negate<int>()); // operation

Vectors

reserve 和 shrink_to_fit使元素的引用址儒,指針,迭代器無效

vec.data()返回?cái)?shù)據(jù)的開始指針(STL實(shí)現(xiàn)vector是連續(xù)的存儲(chǔ)空間)

copy (sentence.cbegin(), sentence.cend(),ostream_iterator(cout," "));//打印

vector<bool> 中的元素一般為1bit

Deques

Lists

Forward Lists

不提供size()方法衅疙,可用distance算法計(jì)算

可唯一直接訪問的元素是第一個(gè)

不提供后向迭代器离福,不可使用需要雙向迭代器的算法,比如sort()炼蛤,但提供成員函數(shù)sort()替代

Sets and Multisets

一般使用平衡二叉樹(紅黑樹,改變元素和搜索元素的性能較好)

可以定義排序準(zhǔn)則作為模板參數(shù)或構(gòu)造參數(shù)蝶涩,否則使用默認(rèn)的排序準(zhǔn)則(<)

sets不允許重復(fù)元素理朋,當(dāng)插入一個(gè)已存在元素時(shí)會(huì)失敗,同時(shí)返回此時(shí)的狀態(tài)

Maps and Multimaps

元素是鍵值對绿聘,按照鍵的一定順序?qū)⒃嘏判蛩陨希琺ultimaps允許重復(fù)的鍵;<map>

注意:鍵和值必須支持拷貝或移動(dòng)操作熄攘,鍵必須支持某種排序規(guī)則兽愤;

內(nèi)部元素組織結(jié)構(gòu)類似于set和multiset

傳遞排序規(guī)則可以使用模板參數(shù)的形式和構(gòu)造函數(shù)參數(shù)形式

map<string, int>::value_type類型表示此map元素的類型

使用value_type和pair<>及make_pair()構(gòu)造map的元素

at()函數(shù)返回元素的值得引用或者out_of_range異常如果沒有對應(yīng)的元素;[]操作符如果沒有此元素則會(huì)插入新的,可能會(huì)無意中插入新的值

Unordered Containers

<unordered_set>和<unordered_map>

實(shí)現(xiàn)是基于hash表浅萧,每個(gè)bucket里的元素用鏈表組織

元素組織結(jié)構(gòu)

具有常數(shù)時(shí)間的插入逐沙,刪除,搜索性能(但是發(fā)生rehash時(shí)是現(xiàn)行復(fù)雜度)

影響hash性能的操作洼畅,load_factor = 元素個(gè)數(shù)/桶的個(gè)數(shù)吩案,表征容器的滿的程度

實(shí)現(xiàn)引用語義的方法

1,shared_ptr<>帝簇,容器的元素是指針

2徘郭,std::reference_wapper<>,容器存儲(chǔ)的是元素的引用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末丧肴,一起剝皮案震驚了整個(gè)濱河市残揉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌芋浮,老刑警劉巖抱环,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異途样,居然都是意外死亡江醇,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門何暇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來陶夜,“玉大人,你說我怎么就攤上這事裆站√醣伲” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵宏胯,是天一觀的道長羽嫡。 經(jīng)常有香客問我,道長肩袍,這世上最難降的妖魔是什么杭棵? 我笑而不...
    開封第一講書人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮氛赐,結(jié)果婚禮上魂爪,老公的妹妹穿的比我還像新娘。我一直安慰自己艰管,他們只是感情好滓侍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著牲芋,像睡著了一般撩笆。 火紅的嫁衣襯著肌膚如雪捺球。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評(píng)論 1 305
  • 那天夕冲,我揣著相機(jī)與錄音氮兵,去河邊找鬼。 笑死耘擂,一個(gè)胖子當(dāng)著我的面吹牛胆剧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播醉冤,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼秩霍,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蚁阳?” 一聲冷哼從身側(cè)響起铃绒,我...
    開封第一講書人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎螺捐,沒想到半個(gè)月后颠悬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡定血,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年赔癌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片澜沟。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡灾票,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出茫虽,到底是詐尸還是另有隱情刊苍,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布濒析,位于F島的核電站正什,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏号杏。R本人自食惡果不足惜婴氮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望盾致。 院中可真熱鬧莹妒,春花似錦、人聲如沸绰上。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蜈块。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間百揭,已是汗流浹背爽哎。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留器一,地道東北人课锌。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像祈秕,于是被迫代替她去往敵國和親渺贤。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容