C++ vector 容器學(xué)習(xí)筆記

本文整理自 http://www.cplusplus.com/reference/vector/vector/

Vector 是 C++ 中十分重要的一個(gè)容器類(lèi)型尾膊。
官方文檔給出的定義是:
Vectors are sequence containers representing arrays that can change in size.
即可以改變大小的數(shù)組的序列容器。

要使用 vector 類(lèi),必須先包含頭文件 vector:

#include <vector>

接下來(lái)我們來(lái)熟悉 Vector 類(lèi)的成員函數(shù):

  1. 構(gòu)造函數(shù)

vector();  // 創(chuàng)建一個(gè)空的 vector
vector(int nSize);  // 創(chuàng)建一個(gè)元素個(gè)數(shù)為 nSize 的 vector
vector(int nSIze, const value_type& value);  // 創(chuàng)建一個(gè)元素個(gè)數(shù)為 nSize 的 vector搏嗡,值均為 value
vector(InputIterator first, InputIterator last);  // 將另一個(gè)迭代器類(lèi)型的[first, last) 復(fù)制到 vector 中
vector(const vector& x);  // 復(fù)制構(gòu)造函數(shù)罚随,復(fù)制已經(jīng)存在的 vector

~vector()  // 析構(gòu)函數(shù)
  1. vector::operator=
vector& operator= (const vector& x);  // 將 x 的所有元素復(fù)制到新容器中训柴,x 元素保留
vector& operator= (vector&& x);  // 將 x 的所有元素移動(dòng)到新容器中, x 處于未指定但有效的狀態(tài)

std::vector<int> foo (3,0);
std::vector<int> bar (5,0);

bar = foo;
foo = std::vector<int>();

關(guān)于未指定但有效的狀態(tài):
當(dāng)對(duì)象處于未指定狀態(tài)時(shí),我們可以對(duì)沒(méi)有先決條件的對(duì)象執(zhí)行任何操作。 如果有一個(gè)操作要執(zhí)行的先決條件纱烘,我們不能直接執(zhí)行該操作,因?yàn)槲覀儾恢缹?duì)象的 unspecified-state 是否滿(mǎn)足先決條件祈餐。

一般沒(méi)有前提條件的操作示例:

  • 銷(xiāo)毀
  • 賦值
  • 像 get擂啥,empty,size 這樣的常量觀察者

有前提條件的操作示例:

  • 取消引用
  • pop_back
  1. 迭代器類(lèi)型
std::vector<int> myvector;  // 定義一個(gè) 空的 vector
for (int i=1; i<=100; i++) myvector.push_back(i);  // 為 vector 添加元素

myvector.begin(); // 返回一個(gè)迭代器帆阳,它指向容器 vector 的第一個(gè)元素
myvector.end(); // 返回一個(gè)迭代器哺壶,它指向容器 vector 的最后一個(gè)元素的下一個(gè)位置
myvector.rbegin();  // 返回一個(gè)逆序迭代器,它指向容器 vector 的最后一個(gè)元素
myvector.rend();  // 返回一個(gè)逆序迭代器蜒谤,它指向容器 vector 的第一個(gè)元素前面的位置
// 以下四個(gè)是上面四個(gè)的常量版本
myvector.cbegin();
myvector.cend();
myvector.crbegin();
myvector.crend();  

關(guān)于反向迭代器的內(nèi)容山宾,見(jiàn) https://blog.csdn.net/kjing/article/details/6936325

  1. 容量
myvector.size();  // 返回當(dāng)前容器的容量大小  100
myvector.max_szie();  // 返回當(dāng)前容器最大可承載的元素?cái)?shù)量  1073741823
myvector.capacity();  // 返回容器分配的容量的大小  128

// 改變?nèi)萜鞔笮。怪疄?n
myvector.resize(size type n);  // 如果 n 比原來(lái)小鳍徽,則保留前 n 位资锰,刪除后面的元素
myvector.resize((size_type n, const value_type& val);  // 如果 n 比原來(lái)大,若提供 val旬盯,則填充台妆;否則值初始化
// 若 n 比原來(lái)的 capacity 還大,則重新分配

myvector.empty();  // 返回容器 size 是否為空
myvector.reserve(size_type n);  // 如果 n 比原來(lái)的 capacity 大胖翰,則 capacity 增大為 n接剩,否則無(wú)變化
myvector.shrink_to_fit();  // 將容器的capacity 減小至與它的 size 相匹配,不會(huì)更改 size 和 value
  1. 獲取元素
myvector[i];  // 返回 myvector 的第 i 個(gè)元素
myvector.at(i);  // 返回對(duì)在 i 位置元素的一個(gè)引用
myvector.front();  // 返回對(duì) myvector 首元素的引用
myvector.back();  // 返回對(duì) myvector 末元素的引用
myvector.data();  // 返回一個(gè)直接訪(fǎng)問(wèn)  vector 內(nèi)部元素的指針
  1. 修改
myvector.assign(InputIterator first, InputIterator last);  // 新 myvector 的值是可迭代對(duì)象的 [first, last)
myvector.assign(size_type n, const value_type& val);  // 新 myvector 有 n 個(gè)元素萨咳,均為 val

myvector.push_back(value_type&& val);  // 在 myvector 最后添加一個(gè)新元素懊缺,同時(shí) size + 1
myvector.pop_back(value_type&& val);  // 在 myvector 刪除最后一個(gè)元素,同時(shí) size - 1

myvector.insert(const_iterator position, const value_type& val);  // 在 position 位置插入新值 val
myvector.insert(const_iterator position, size_type n, const value_type& val);  // 在 position 位置插入 n 個(gè)新值 val
myvector.insert(const_iterator position, InputIterator first, InputIterator last);  // 在 position 位置插入另一個(gè)迭代對(duì)象[first:last)

myvector,erase(const_iterator position);  // 刪除 position 位置的元素
myvector.erase(const_iterator first, const_iterator last);  // 刪除 [first,last) 范圍的元素

myvector.swap(vector& x);  // 交換,所有東西全部交換
myvector.clear();  // 清除 myvector 里的所有元素鹃两,只留一個(gè)空 vector

有關(guān) allocator 的知識(shí)參見(jiàn)原網(wǎng)址遗座。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市俊扳,隨后出現(xiàn)的幾起案子途蒋,更是在濱河造成了極大的恐慌,老刑警劉巖馋记,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件号坡,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡梯醒,警方通過(guò)查閱死者的電腦和手機(jī)宽堆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)茸习,“玉大人畜隶,你說(shuō)我怎么就攤上這事『排撸” “怎么了籽慢?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)猫胁。 經(jīng)常有香客問(wèn)我嗡综,道長(zhǎng),這世上最難降的妖魔是什么杜漠? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮察净,結(jié)果婚禮上驾茴,老公的妹妹穿的比我還像新娘。我一直安慰自己氢卡,他們只是感情好锈至,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著译秦,像睡著了一般峡捡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上筑悴,一...
    開(kāi)封第一講書(shū)人閱讀 52,475評(píng)論 1 312
  • 那天们拙,我揣著相機(jī)與錄音,去河邊找鬼阁吝。 笑死砚婆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的突勇。 我是一名探鬼主播装盯,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼坷虑,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了埂奈?” 一聲冷哼從身側(cè)響起迄损,我...
    開(kāi)封第一講書(shū)人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎账磺,沒(méi)想到半個(gè)月后芹敌,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡绑谣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年党窜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片借宵。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡幌衣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出壤玫,到底是詐尸還是另有隱情豁护,我是刑警寧澤,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布欲间,位于F島的核電站楚里,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏猎贴。R本人自食惡果不足惜班缎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望她渴。 院中可真熱鬧达址,春花似錦、人聲如沸趁耗。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)苛败。三九已至满葛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間罢屈,已是汗流浹背嘀韧。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留儡遮,地道東北人乳蛾。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親肃叶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蹂随,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

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

  • 標(biāo)簽(空格分隔): STL 運(yùn)用STL,可以充分利用該庫(kù)的設(shè)計(jì)因惭,讓我為簡(jiǎn)單而直接的問(wèn)題設(shè)計(jì)出簡(jiǎn)單而直接的解決方案岳锁,...
    認(rèn)真學(xué)計(jì)算機(jī)閱讀 1,483評(píng)論 0 10
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,523評(píng)論 1 51
  • 朋友,是除親人外最親近的人蹦魔,但朋友卻難長(zhǎng)久 1我有個(gè)發(fā)小激率,從小一起長(zhǎng)大的人,小學(xué)的時(shí)候勿决,我們是同窗乒躺,每每一起上學(xué),...
    狂奔的喔牛閱讀 374評(píng)論 0 1
  • 第一次寫(xiě)網(wǎng)絡(luò)日記就選了這么一個(gè)題目低缩。原因是昨天晚上我被關(guān)禁閉了嘉冒。 期末考試了,孩子爸爸是個(gè)常年出差的咆繁。幼兒園起讳推,我...
  • 《呼嘯山莊》 艾米莉勃朗特(1818~1848)年 英國(guó)作家 英國(guó)有一個(gè)很有意思的家庭,三姐妹都是作家玩般,大姐就...
    曉地說(shuō)閱讀 349評(píng)論 1 5