標(biāo)準(zhǔn)庫(kù)類型 vector 表示對(duì)象的集合狭归,其中所有對(duì)象的類型都相同枫夺。集合中的每個(gè)對(duì)象都有一個(gè)與之對(duì)應(yīng)的索引,索引用于訪問對(duì)象雏婶。因?yàn)?vector “容納著” 其他對(duì)象物赶,所以它也被稱為容器
定義和初始化 vector 對(duì)象
vector<T> v1; //v1 是一個(gè)空 vector ,執(zhí)行默認(rèn)初始化
vector<T> v2(v1); //v2 中包含有 v1 所有元素的副本
vector<T> v2 = v1; // 等價(jià)于 v2(v1)留晚,v2 包含有 v1 所有元素的副本
vector<T> v3(n,val); // v3 包含有 n 個(gè)重復(fù)的元素酵紫,每個(gè)元素的值都是 val
vector<T> v4(n); //v4 包含了 n 個(gè)重復(fù)地執(zhí)行了值初始化的對(duì)象
vector<T> v5{a,b,c...}; //v5 包含了初始值個(gè)數(shù)的元素,每個(gè)元素被賦予相應(yīng)的初始值错维。
vector<T> v5={a,b,c}; // 等價(jià)于 v5{a,b,c...}
vector 可以初始化為空奖地,也可以把一個(gè) vector 對(duì)象的元素拷貝給另外一個(gè) vector 對(duì)象。但是兩個(gè) vector 對(duì)象類型必須相同赋焕。
vector<int> ivec;
vector<int> ivec2(ivec);
vector<int> ivec3 = ivec;
vector<string> svec(ivec2); //錯(cuò)誤 類型不同
注意: 列表初始化是用大括號(hào)参歹,不是圓括號(hào)。
vector<string> v1{"a","b","c"};
vector<string> v1("a","b","c");
創(chuàng)建指定數(shù)量的元素
vector<int> ivec(10,-1);
vector<string> svec(10,"hi");
使用花括號(hào)圓括號(hào)的區(qū)別:
vector<int> v1(10); //v1 有 10 個(gè)元素隆判,都初始化為 0 犬庇;
vector<int> v2{10}; //v2 有 1 個(gè)元素,初始化為 10 侨嘀;
vector<int> v3(10,1); //v3 有 10 個(gè)元素,都初始化為 1 ;
vector<int> v4{10,1}; //v4 有 2 個(gè)元素坝冕,初始化為 10 梨树,1 ;
vector<string> v5{"hi"};
vector<string> v6("hi") //錯(cuò)誤不能使用字符串字面值構(gòu)建 vector
vector<string> v7{10};
vector<string> v8{10,"hi"};
向 vector 對(duì)象中添加元素
vector<int> v2;
for (int i = 0; i != 100; ++i)
v2.push_back(i);
**注意,for 循環(huán)中不應(yīng)改變其所遍歷序列的大小赤赊。
vetor 支持的操作:
image.png
計(jì)算 vector 內(nèi)對(duì)象的索引
例題:
將 0-100 成績(jī)分段:0-10 10-20 .... 并統(tǒng)計(jì)個(gè)數(shù)
vector<unsigned> scores(11,0);
unsigned grade;
while (cin >> grade) {
if (grade <= 100)
++scores[grade/10];
}
不能用下標(biāo)形式添加元素
vector<int> ivec;
for(decltype(ivec.size()) ix = 0; ix != 10; ++ix)
ivec[ix] = ix; //嚴(yán)重錯(cuò)誤