vector相關操作小結

2021-10-06 07:50:21 字數 3798 閱讀 8283

其實我原本只想對vector小結一下的……好吧,重點還是它,其他兩個由於性質相似所以大概說一下vector,array,valarray是c++提供的三個陣列模板,各自有著不同的優勢,三者均位於 命名空間std中,使用時均需要包括與之同名的標頭檔案

/*常用物件建立語法 */

vector

vt(n_elem)

;valarray

va(n_elem)

;// n_elem 整型 常量/變數 均可

vectorvt;

valarrayva;

array arr;

//na_elem 只能是常量

/*valarray 優點體現 */

#include

#include

void

test()

1.建構函式
vectorv;                      採用模板實現類實現,預設建構函式

vector(v.begin(), v.end()); 將v [begin().end()) 區間(前閉後開)中的元素拷貝給本身

vector(n,elem); 建構函式將n個elem拷貝給本身

vector(const vector &vec); 拷貝建構函式

2.賦值操作
vector& operator=(const vector &vec); 過載等號操作符

assign(beg, end); 將 [beg, end)區間中的資料拷貝賦值給本身。

assign(n, elem); 將n個elem拷貝賦值給本身。

3. 對vector容器的容量和大小操作
empty();						//判斷容器是否為空

capacity(); //容器的容量

size(); //返回容器中元素的個數

resize(int num); //重新指定容器的長度為num,若容器變長,則以預設值填充新位置。

//如果容器變短,則末尾超出容器長度的元素被刪除。

resize(int num, elem); //重新指定容器的長度為num,若容器變長,則以elem值填充新位置。

//如果容器變短,則末尾超出容器長度的元素被刪除

4.對vector容器進行插入、 刪除操作
push_ back(ele);									//尾部插入元素ele

pop_ back(); //刪除最後乙個元素

insert(const_ iterator pos, ele); //迭代器指向位置pos插入元素ele

insert(const_ iterator pos, int count,ele); //迭代器指向位置pos插入count個元素ele

erase(const_ iterator pos); //刪除迭代器指向的元素

erase(const_ iterator start, const_ iterator end); //刪除迭代器從start到end之間的元素

clear(); //刪除容器中所有元素

5. 對vector中的資料的訪問操作
at(int idx);		 //返回索引idx所指的資料	

operator; //返回索弓lidx所指的資料

front(); //返回容器中第乙個資料元素

back(); //返回容器中最後-個資料元素

6.vector互換容器 :實現兩個容器中元素進行互換
swap(vct);    將vec與本身的元素進行互換 

實際用途:收縮記憶體

7. vector預留空間
功能描述:

●減少vector在動態擴充套件容量時的擴充套件次數

函式原型:

● reserve(int len); //容器預留len個元素長度,預留位置不初始化,元素不可訪問。

8.避免陣列非法索引操作
at();  // 避免 a[-2] = 4; 同適用於array,類同 cin 物件成員函式 getline()

// 代價:執行時間更長……

9.遍歷

具體實現如下:

#include

#include

#include

//標準演算法標頭檔案

using

namespace std;

void

print

(vector<

int>

& v1)

/*擴容 */

void

test8()

} cout << num << endl;

// 未用reserve時要擴充15次,會導致效能降低,用reserve後只進行了兩次

}/*容量與大小 */

void

test7()

/*swap */

void

test6()

void

test5()

/*插入與刪除 */

void

test4()

/*容量、大小 */

void

test3()

}void

test1()

/*賦值 */

void

test2()

/*遍歷 */

void

func

(int a)

void

test01()

//第二種遍歷方式

for(vector<

int>

::iterator it = b.

begin()

;it != b.

end(

);it++

)//第三種遍歷方式 利用stl中提供的演算法(注意包含algorithm標頭檔案)

for_each

(b.begin()

,b.end()

,func)

;}

附:迭代器介紹:
#include

using

namespace std;

#include

void

test()

v.push_back

(v1)

; v.

push_back

(v2)

; v.

push_back

(v3)

; v.

push_back

(v4)

; v.

push_back

(v5)

; v.

push_back

(v6)

;for

(vector< vector<

int>

>

::iterator it = v.

begin()

; it != v.

end(

); it++)

cout << endl;}}

intmain()

vector操作小結

前面了解了一下vector,現在我們來看看vector的相關操作。int main vectorv5 vectorv6 3 只提供數量而略去初始值,int 0,string 空串 vector iterator it push back向vector物件中新增元素 for int i 0 i 10 ...

C 中Vector相關知識小結

疫情所迫,希望用這種方法督促自己堅持學習。同時記錄在找工作過程中的艱辛不易。部落格內容持續增減修改,都為摘錄和個人理解。歡迎各位批評指正其中錯誤,相互勉勵,共同進步。標準庫型別vector表示某一類物件的集。合因此也被叫做容器 container 標頭檔案定義方法 include using std...

vector的空間相關操作

當我們向vector中新增元素時,如果vector空間大小不足,則會以原大小的兩倍另外配置一塊較大的新空間,然後將原空間的內容拷貝過來,在新空間的內容末尾新增元素,並釋放原空間。vector的空間動態增加大小,並不是在原空間之後的相鄰位址增加新空間,因為vector的空間是線性連續分配的,並不能原空...