順序容器

  • 所有容器類都有共享公共的接口拣技,不同容器按照不同方式對其進行擴展偏形。每種容器都提供了不同性能和功能的權(quán)衡

  • 順序容器:在添加和刪除元素敏储、隨機訪問元素之間做出折中谎柄。關(guān)鍵是連續(xù)儲存還是非連續(xù)儲存

vecotr  // 可變大小數(shù)組丁侄,支持隨機訪問,尾部操作
deque   // 雙端隊列朝巫, 支持隨機訪問鸿摇,頭部、尾部操作
list    // 雙向鏈表劈猿,只有雙向順序訪問拙吉,可在任何位置操作
forward_list  //單向鏈表,只有單向順序訪問糙臼, 可在任何位置操作
array       //同數(shù)組庐镐,不過更安全
string      // 字符串
  • deque定義在頭文件<deque>,其他容器变逃,同

  • 有對所有容器都適用的操作必逆,但是這些操作可能對數(shù)據(jù)類型有要求

vector<noDefault> v1(10, init)  //正確:        提供了元素初始值
vector<noDefault> v1(10)  //error : 沒有默認構(gòu)造函數(shù)

所有容器都有的操作

  • 迭代器
//每個容器都定義了多個類型,如
vector<int>::iterator it;
vector<int>::reverse_iterator r_it;
vector<int>::const_iterator c_it;
vector<int>::size_type s;
vector<int>::differance_type d;  //還有 value reference const_reference

//獲得迭代器
auto it1 = a.begin();
auto it2 = a.rbegin();  //反向迭代器
auto it3 = a.cbegin();
auto it4 = a.crbegin();
  • 容器定義和初始化
C c;  //默認構(gòu)造函數(shù)

C c1(c2);
C c1 = c2;  //c1初始化為c2的拷貝揽乱, 元素類型相同

C c{a, b, c}
C c = {a, b, c}  //c初始化為初始化列表中元素的拷貝名眉, 元素類型相容即可

C c(b, e);   //c初始化為迭代器b和c之間元素的拷貝,左閉右開凰棉。  元素類型相容即可(array不適用)
            // list<int>的迭代器可以初始化vector<double>等
//只有順序容器(不包括array)的構(gòu)造函數(shù)才能接受大小參數(shù)
C seq(n)  //包含n個元素损拢, string不適用
C seq(n, t); //seq包含n個初始化為值t的元素
  • array<int, 10> a = {1, 2};同時指定元素類型和大小。運行拷貝和賦值撒犀,數(shù)組則不行

  • 可以通過迭代器初始化vector<double>福压,用list<int>

  • 賦值操作:會使得左邊容器內(nèi)部的迭代器掏秩、引用和指針失效。swap不會(string和array除外)

c1 = c2;

c = {a, b, c}  //array不適用
swap(c1, c2)   //比拷貝快
c1.swap(c2)

//assign操作不適用于關(guān)聯(lián)容器和array荆姆。  很像初始化
seq.assign(b, e)  //迭代器
seq.assign(il)  //初始化為列表il中的元素
seq.assign(n, t)  //n個值為t的元素
  • forward_list是單鏈表蒙幻,操作有所不同
fl.before_begin()
fl.insert_after()
fl.erase_after()
emplace_after(p, args)
  • 改變?nèi)萜鞔笮?/li>
list<int> a(10, 42);  //10個int,每個值都是42
a.resize(15);    //后面5個是0
a.resize(25, -1);   //加上10個-1
a.resize(5);   //刪除后面的20個元素
  • 容器操作可能使迭代器失效胆筒。使用失效的迭代器邮破、引用或指針是嚴重的運行時錯誤。添加元素一般保證插入位置之前的元素及其地址不變(順序存儲的情況)仆救,后面的則要平移抒和,地址改變。(把迭代器當(dāng)作指針來看)后面的迭代器對應(yīng)的對象變化了彤蔽。如果添加元素后摧莽,需要重新分配,則前后的迭代器都失效了铆惑。鏈式存儲的情況也可以這么分析

  • vector的容量關(guān)聯(lián)

// 初始化之后范嘱,一個一個元素添加。當(dāng)個數(shù)大于容量時员魏,重新分配內(nèi)存丑蛤,一般*2
c.reserve(n)  //明確告訴分配至少n個元素的空間
c.capacity()  //容量,一般大于實際的元素數(shù)量
c.shrink_to_fit()  //把容量減少為元素

的個數(shù)
  • string增加了許多可以用下標代替迭代器的操作撕阎,及string和C風(fēng)格字符數(shù)組之間的相互轉(zhuǎn)換

  • 容器適配器:stack受裹、ququepriority_queue

stack默認基于deque,可以基于listvector虏束。 s.pop()刪除棧頂元素棉饶,但不返回
queue默認基于deque,可以基于listvector镇匀。 q.pop()返回但不刪除
priority_queue默認基于vector照藻,可以基于listp_q.pop()返回但不刪除

stack<int>  s(deq);  //從deq拷貝元素
stack<string, vector<string>> s_v;  //基于vector
stack<string, vector<string>> s_v(v);  //基于vector汗侵,從v中拷貝元素
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末幸缕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子晰韵,更是在濱河造成了極大的恐慌发乔,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雪猪,死亡現(xiàn)場離奇詭異栏尚,居然都是意外死亡,警方通過查閱死者的電腦和手機只恨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門译仗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抬虽,“玉大人,你說我怎么就攤上這事古劲〕飧常” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵产艾,是天一觀的道長。 經(jīng)常有香客問我滑绒,道長闷堡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任疑故,我火速辦了婚禮杠览,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘纵势。我一直安慰自己踱阿,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布钦铁。 她就那樣靜靜地躺著软舌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪牛曹。 梳的紋絲不亂的頭發(fā)上佛点,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天,我揣著相機與錄音黎比,去河邊找鬼超营。 笑死,一個胖子當(dāng)著我的面吹牛阅虫,可吹牛的內(nèi)容都是我干的演闭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼颓帝,長吁一口氣:“原來是場噩夢啊……” “哼米碰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起躲履,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤见间,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后工猜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體米诉,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年篷帅,在試婚紗的時候發(fā)現(xiàn)自己被綠了史侣。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拴泌。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖惊橱,靈堂內(nèi)的尸體忽然破棺而出蚪腐,到底是詐尸還是另有隱情,我是刑警寧澤税朴,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布回季,位于F島的核電站,受9級特大地震影響正林,放射性物質(zhì)發(fā)生泄漏泡一。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一觅廓、第九天 我趴在偏房一處隱蔽的房頂上張望付魔。 院中可真熱鬧膳帕,春花似錦履腋、人聲如沸企软。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽塑娇。三九已至,卻和暖如春篡殷,著一層夾襖步出監(jiān)牢的瞬間钝吮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工板辽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留奇瘦,地道東北人。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓劲弦,卻偏偏與公主長得像耳标,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子邑跪,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,976評論 2 355

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