Vector等容器初始化與相關操作

2021-08-27 00:15:03 字數 3716 閱讀 7769

一.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...