一.vector初始化
1 一維陣列初始化
(1)不帶引數的建構函式初始化
//初始化乙個size為0的vector
vectorabc;
(2)帶引數的建構函式初始化
將vector初始化為size大小,每個元素值為預設值
//初始化了10個預設值為0的元素
vectorabc(10);
注意:與自己定義的類和結構體中的struct st m=new st(10);的初始化是不同的,這裡結構體用的是結構體中的建構函式進行初始化,也就是結構體遍歷預設值是10,而沒有初始化為10個。
下面初始化為size個具有初始值的vector
//初始化了10個值為1的元素
vectorcde(10,1);
(3)通過陣列位址初始化
//通過陣列a的位址初始化,注意位址是從0到5(左閉右開區間)
int a[5] = ;
vectorb(a, a+5);
以下直接用列表初始化
vectorilist = ;
//或vectorilist ;
ilist初始化為列表中元素的拷貝,列表中元素必須與ilist的元素型別相容,本例中必須是與整數型別相容的型別,整型會直接拷貝,其他型別會進行型別轉換。
(4)通過同型別的vector初始化
vectora(5,1);
//通過a初始化
vectorb(a);
(5)通過insert初始化
//insert初始化將同型別的迭代器對應的始末區間(左閉右開區間)內的值插入到vector中
vectora(6,6);vectorb;
//將a[0]~a[2]插入到b中,b.size()由0變為3
b.insert(b.begin(), a.begin(), a.begin() + 3);
//insert也可通過陣列位址區間實現插入
int a[6] = ;
vectorb;
//將a的所有元素插入到b中
b.insert(b.begin(), a, a+7);
//此外,insert還可以插入m個值為n的元素//在b開始位置處插入6個5
b.insert(b.begin(), 6, 5);
(6)通過copy函式賦值
vectora(5,1);
int a1[5] = ;
vectorb(10);
/*將a中元素全部拷貝到b開始的位置中,注意拷貝的區間為a.begin() ~ a.end()的左閉右開的區間*/
copy(a.begin(), a.end(), b.begin());
//拷貝區間也可以是陣列位址構成的區間
copy(a1, a1+5, b.begin() + 5);
2 二維陣列初始化
1.直接通過陣列位址
vector> array=,,,};
2 vector用花括號{}的初始方式
vector< vector> array( 10, vector(0) );
上面的意思是二維的動態陣列,有10行,每一行是乙個儲存這一行資料的vector。所以每一行的長度是可以變化的。
之所以用到vector(0)是對vector初始化,否則不能對vector存入元素。
1.對array.size()來說是行數的含義
2.對array[i].size()來說是i行元素的個數
//注意下面這一行:vector"之間要有空格!否則會被認為是過載">>"
vector> >vecint(m, vector>(n,vector(l)));//m行n列
3 使用new建立vector型別的陣列
1.為指標分配記憶體
//這裡的vectors並不是1個vector,而是有n個vector,即建立了n個vector
vector* vectors = new vector[n];
輸入元素:vectors[i].push_back(data);
例:
vector*vec=new vector(10,0);
cout//建立乙個向量類物件v,有100個元素的空間,若空間使用完時,以50個元素空間單位遞增。
vector v = new vector("100",50);
二.vector一些操作
1 vector擦除
1.myvector.clear(); //移除容器中的所有元素
刪除容器中所有的元素(被銷毀),留下大小為0的容器。
vector::clear()函式的作用是清空容器中的內容,但如果是指標物件的話,並不能清空其內容,必須要像以下方法一樣才能達到清空指標物件的內容:
vectorxx;
for(int it=0;it!=xx.size();++it)
xx.clear();
但並不**記憶體,但你可以通過swap()函式來巧妙的達到**記憶體的效果:
xx.clear();
xx.swap(vector());
2.myvector.erase (myvector.begin(),myvector.begin()+3);
從容器中移除單個元素(位置)或一段元素([first,last))
vector::erase()用於清空容器中的內容以及釋放記憶體,並返回指向刪除元素的下乙個元素的迭代器。
3.刪除容器c中最後乙個資料。
c.pop_back()
2 容器大小修改
1.myvector.resize(8,100);
調整容器的大小,使其包含n個元素。
如果n小於當前的容器大小,則容器內容被縮減為其前n個元素,將其其他元素刪除(並銷毀它們)
如果n大於當前容器大小,則通過在末尾插入盡可能多的元素來擴充套件內容以達到n的大小。 如果指定val,則將新元素初始化為val的副本,否則將進行值初始化。
如果n也大於當前容器容量,則會自動重新分配分配的儲存空間。
請注意,此函式通過插入或刪除容器中的元素來更改容器的實際內容。
3 容器元素插入
1.myvector.emplace_back (100);
c++11中加入的新特性,emplace_back能通過引數構造物件,不需要拷貝或者移動記憶體,相比push_back能更好地避免記憶體的拷貝與移動,使容器插入元素的效能得到進一步提公升。
所有的標準庫容器(array除外,因為它的長度不可改變,不能插入元素)都增加了類似的方法:emplace、emplace_hint、emplace_front、emplace_after、emplace_back等
2.auto it = myvector.emplace ( myvector.begin()+1, 100 );
emplace使得在指定位置插入乙個元素100
4 交換兩個vector
swap()
5 c.at(idx)
傳回容器索引idx所指的資料,如果idx越界,丟擲out_of_range。
即陣列c[idx];
6 c.max_size()
返回容器中最大資料的數量。
vector容器型別及初始化方法
看到一篇很好的學習的vector虛容器的博文,分享給大家,感謝博主,對我幫助很大!vector類為內建陣列提供了一種替代表示,與string類一樣 vector 類是隨標準 c 引入的標準庫的一部分 為了使用vector 我們必須包含相關的標頭檔案 include 使用vector有兩種不同的形式,...
二維容器Vector動態初始化
今天又是自閉的一天,看一下自閉之後能獲得哪些新知識呢 vector a int ans maxn maxn int main 經過挖土種植栽培,花開始長大了。現有n m的花田,每朵花都有自己的漂亮值。現給你n,m和乙個標準漂亮值d 大於等於d的是漂亮的花,小於d的是醜花 小明想要知道某個矩形內漂亮的...
C 之 Vector(容器)初始化高維陣列
使用c 標準模版庫 stl 中的vector 向量 可以實現變長陣列,實現二維陣列,高維陣列。下面給出 實現。include include using namespace std int main 那麼用vector 向量 怎樣實現二維陣列呢,下面給出源程式 include include inc...