C++ Vector 簡(jiǎn)記

收集于:young0173


vector是向量類型秩仆,它可以容納許多類型的數(shù)據(jù)码泛,如若干個(gè)整數(shù),所以稱其為容器澄耍。

vector 是C++ STL的一個(gè)重要成員噪珊,使用它時(shí)需要包含頭文件:

#include<vector>;

一、vector 的初始化:可以有五種方式,舉例說(shuō)明如下:

    (1) vector<int> a(10); //定義了10個(gè)整型元素的向量(尖括號(hào)中為元素類型名逾苫,它可以是任何合法的數(shù)據(jù)類型)卿城,但沒(méi)有給出初值,其值是不確定的铅搓。
   (2)vector<int> a(10,1); //定義了10個(gè)整型元素的向量,且給出每個(gè)元素的初值為1
   (3)vector<int> a(b); //用b向量來(lái)創(chuàng)建a向量,整體復(fù)制性賦值
   (4)vector<int> a(b.begin(),b.begin+3); //定義了a值為b中第0個(gè)到第2個(gè)(共3個(gè))元素
   (5)int b[7]={1,2,3,4,5,9,8};
        vector<int> a(b,b+7); //從數(shù)組中獲得初值

二搀捷、vector對(duì)象的幾個(gè)重要操作星掰,舉例說(shuō)明如下:

    (1)a.assign(b.begin(), b.begin()+3); //b為向量,將b的0~2個(gè)元素構(gòu)成的向量賦給a
    (2)a.assign(4,2); //是a只含4個(gè)元素嫩舟,且每個(gè)元素為2
    (3)a.back(); //返回a的最后一個(gè)元素
    (4)a.front(); //返回a的第一個(gè)元素
    (5)a[i]; //返回a的第i個(gè)元素氢烘,當(dāng)且僅當(dāng)a[i]存在2013-12-07
    (6)a.clear(); //清空a中的元素
    (7)a.empty(); //判斷a是否為空,空則返回ture,不空則返回false
    (8)a.pop_back(); //刪除a向量的最后一個(gè)元素
    (9)a.erase(a.begin()+1,a.begin()+3); //刪除a中第1個(gè)(從第0個(gè)算起)到第2個(gè)元素家厌,也就是說(shuō)刪除的元素從a.begin()+1算起(包括它)一直到a.begin()+         3(不包括它)
    (10)a.push_back(5); //在a的最后一個(gè)向量后插入一個(gè)元素播玖,其值為5
    (11)a.insert(a.begin()+1,5); //在a的第1個(gè)元素(從第0個(gè)算起)的位置插入數(shù)值5,如a為1,2,3,4饭于,插入元素后為1,5,2,3,4
    (12)a.insert(a.begin()+1,3,5); //在a的第1個(gè)元素(從第0個(gè)算起)的位置插入3個(gè)數(shù)蜀踏,其值都為5
    (13)a.insert(a.begin()+1,b+3,b+6); //b為數(shù)組维蒙,在a的第1個(gè)元素(從第0個(gè)算起)的位置插入b的第3個(gè)元素到第5個(gè)元素(不包括b+6),如b為1,2,3,4,5,9,8         果覆,插入元素后為1,4,5,9,2,3,4,5,9,8
    (14)a.size(); //返回a中元素的個(gè)數(shù)颅痊;
    (15)a.capacity(); //返回a在內(nèi)存中總共可以容納的元素個(gè)數(shù)
    (16)a.resize(10); //將a的現(xiàn)有元素個(gè)數(shù)調(diào)至10個(gè),多則刪局待,少則補(bǔ)斑响,其值隨機(jī)
    (17)a.resize(10,2); //將a的現(xiàn)有元素個(gè)數(shù)調(diào)至10個(gè),多則刪钳榨,少則補(bǔ)舰罚,其值為2
    (18)a.reserve(100); //將a的容量(capacity)擴(kuò)充至100,也就是說(shuō)現(xiàn)在測(cè)試a.capacity();的時(shí)候返回值是100.這種操作只有在需要給a添加大量數(shù)據(jù)的時(shí)候才         顯得有意義薛耻,因?yàn)檫@將避免內(nèi)存多次容量擴(kuò)充操作(當(dāng)a的容量不足時(shí)電腦會(huì)自動(dòng)擴(kuò)容沸停,當(dāng)然這必然降低性能) 
    (19)a.swap(b); //b為向量,將a中的元素和b中的元素進(jìn)行整體性交換
    (20)a==b; //b為向量昭卓,向量的比較操作還有!=,>=,<=,>,<

三愤钾、順序訪問(wèn)vector的幾種方式,舉例說(shuō)明如下:
(1)向向量a中添加元素
1候醒、

1  vector<int> a;
2 for(int i=0;i<10;i++)
3 a.push_back(i);

2能颁、也可以從數(shù)組中選擇元素向向量中添加

int a[6]={1,2,3,4,5,6};
vector<int> b;
for(int i=1;i<=4;i++)
b.push_back(a[i]);

3倒淫、也可以從現(xiàn)有向量中選擇元素向向量中添加

int a[6]={1,2,3,4,5,6};
vector<int> b;
vector<int> c(a,a+4);
for(vector<int>::iterator it=c.begin();it<c.end();it++)
b.push_back(*it);

4伙菊、也可以從文件中讀取元素向向量中添加

ifstream in("data.txt");
vector<int> a;
for(int i; in>>i)
    a.push_back(i);

5、【誤區(qū)】

vector<int> a;
for(int i=0;i<10;i++)
    a[i]=i;

//這種做法以及類似的做法都是錯(cuò)誤的敌土。剛開(kāi)始我也犯過(guò)這種錯(cuò)誤镜硕,后來(lái)發(fā)現(xiàn),下標(biāo)只能用于獲取已存在的元素返干,而現(xiàn)在的a[i]還是空的對(duì)象

(2)從向量中讀取元素
1兴枯、通過(guò)下標(biāo)方式讀取

int a[6]={1,2,3,4,5,6};
vector<int> b(a,a+4);
for(int i=0;i<=b.size()-1;i++)
    cout<<b[i]<<" ";

2、通過(guò)遍歷器方式讀取

int a[6]={1,2,3,4,5,6};
vector<int> b(a,a+4);
for(vector<int>::iterator it=b.begin();it!=b.end();it++)
    cout<<*it<<" ";

四矩欠、幾種重要的算法财剖,使用時(shí)需要包含頭文件:

#include<algorithm>
(1)sort(a.begin(),a.end()); //對(duì)a中的從a.begin()(包括它)到a.end()(不包括它)的元素進(jìn)行從小到大排列
(2)reverse(a.begin(),a.end()); //對(duì)a中的從a.begin()(包括它)到a.end()(不包括它)的元素倒置,但不排列癌淮,如a中元素為1,3,2,4,倒置后為4,2,3,1
(3)copy(a.begin(),a.end(),b.begin()+1); //把a(bǔ)中的從a.begin()(包括它)到a.end()(不包括它)的元素復(fù)制到b中躺坟,從b.begin()+1的位置(包括它)開(kāi)        始復(fù)制,覆蓋掉原有元素
(4)find(a.begin(),a.end(),10); //在a中的從a.begin()(包括它)到a.end()(不包括它)的元素中查找10乳蓄,若存在返回其在向量中的位置

五咪橙、參考引用:

1、小熊的世界
2、MSDN
3美侦、《C++程序設(shè)計(jì)教程(第二版)》- 錢能 -清華大學(xué)出版社

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末产舞,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子音榜,更是在濱河造成了極大的恐慌庞瘸,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赠叼,死亡現(xiàn)場(chǎng)離奇詭異擦囊,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)嘴办,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門瞬场,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人涧郊,你說(shuō)我怎么就攤上這事贯被。” “怎么了妆艘?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵彤灶,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我批旺,道長(zhǎng)幌陕,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任汽煮,我火速辦了婚禮搏熄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘暇赤。我一直安慰自己心例,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布鞋囊。 她就那樣靜靜地躺著止后,像睡著了一般。 火紅的嫁衣襯著肌膚如雪失暴。 梳的紋絲不亂的頭發(fā)上坯门,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音逗扒,去河邊找鬼。 笑死欠橘,一個(gè)胖子當(dāng)著我的面吹牛矩肩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼黍檩,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼叉袍!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起刽酱,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤喳逛,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后棵里,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體润文,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年殿怜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了典蝌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡头谜,死狀恐怖骏掀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情柱告,我是刑警寧澤截驮,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站际度,受9級(jí)特大地震影響葵袭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜甲脏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一眶熬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧块请,春花似錦娜氏、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至海渊,卻和暖如春绵疲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背臣疑。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工盔憨, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人讯沈。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓郁岩,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子问慎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353