C STL中vector(可變大小陣列)用法總結

2021-08-09 20:11:56 字數 3271 閱讀 5733

標準庫型別vector表示某種型別物件的集合,集合中每個物件都有乙個與之對應的索引,用以訪問物件。要想使用vector,必須包含標頭檔案vector,並且需要宣告using std::vector

hljs cpp">/*--------------------建立和初始化vector物件--------------------*/

/*建立乙個包含t型別元素的空vector*/

vector

v1;/*用v1來建立v2,v2包含v1中所有元素的拷貝*/

vector

v2(v1);

/*等價於vectorv2(v1);*/

vector

v2 = v1;

/*v3包含n個t型別的元素,每個元素的值都是val*/

vector

v3(n, val);

/*v4包含n個執行值初始化的元素*/

vector

v4(n);

/*利用初始值列表構造vector,每個元素被賦予相應的初始值*/

vector

v5;/*等價於v5*/

vector

v5 = ;

/*---------------------------迭代器---------------------------*/

/*返回指向vec的第乙個元素和最後乙個元素之後的迭代器*/

vec.begin(), vec.end();

/*返回指向vec的第乙個元素和最後乙個元素之後的const迭代器(只能讀元素,不能寫元素)*/

vec.cbegin(), vec.cend();

/*返回指向vec的最後乙個元素和第乙個元素之前的迭代器*/

vec.rbegin(), vec.rend();

/*返回指向vec的最後乙個元素和第乙個元素之前的const迭代器*/

vec.crbegin(), vec.crend();

/*--------------------------容量相關--------------------------*/

/*vec中元素的數目*/

vec.size();

/*vec可以儲存的最大元素數量*/

vec.max_size();

/*vec為空,返回true;否則返回false*/

vec.empty();

/*在不重新分配空間的情況下,vec可以儲存多少元素*/

vec.capacity();

/*分配至少能容納n個元素的記憶體空間*/

vec.reserve(n);

/*請求將capacity()減少為和size()一樣的大小,但是呼叫該函式也不保證一定會退回記憶體空間*/

vec.shrink_to_fit();

/*--------------------------交換和賦值--------------------------*/

/*交換vec1和vec2中的元素。vec1和vec2必須具有相同的型別*/

swap(vec1, vec2);

/*同swap(vec1, vec2)。注意swap並未對任何元素進行拷貝、插入或刪除操作,它只交換兩個vector內部資料結構*/

vec1.swap(vec2);

/*將vec中的元素替換為迭代器b和e所表示範圍內的元素。迭代器b和e不能指向vec中的元素*/

vec.assign(b, e);

/*將vec中的元素替換為初始化列表il中的元素*/

vec.assign(il);

/*將vec中的元素替換為n個值為t的元素*/

vec.assign(n, t);

/*注意賦值相關的運算會導致指向左邊容器內部的迭代器、引用和指標失效。*/

/*---------------------------新增元素---------------------------*/

/*在vec的尾部新增乙個值為t的元素,返回void*/

vec.push_back(t);

/*在vec的尾部新增乙個由args建立的元素*/

vec.emplace_back(args);

/*在迭代器p指向的元素之前新增乙個值為t的元素,返回指向新新增的元素的迭代器*/

vec.insert(p, t);

/*在迭代器p指向的元素之前新增乙個由args建立的元素,返回指向新新增元素的迭代器*/

vec.emplace(p, args);

/*在迭代器p指向的元素之前新增n個值為t的元素。返回指向新新增的第乙個元素的迭代器;若n為0,則返回p*/

vec.insert(p, n, t);

/*將迭代器b和e指定範圍內的元素插入到迭代器p指向的元素之前,b和e不能指向vec中的元素。返回指向新新增的元素的迭代器;若範圍為空,返回p*/

vec.insert(p, b, e);

/*il是乙個花括號包圍的初始值列表,將初始值列表裡的值插入到迭代器p指向的元素之前。返回指向新新增的元素的迭代器;若列表為空,返回p*/

vec.insert(p, il);

/*---------------------------訪問元素---------------------------*/

/*返回vec中最後乙個元素的引用。如果vec為空,則屬於未定義行為*/

vec.back();

/*返回vec中第乙個元素的引用。如果vec為空,則屬於未定義行為*/

vec.front();

/*返回vec中下標為n的元素的引用,n是乙個無符號整數。如果下標越界,則屬於未定義行為*/

vec[n];

/*返回vec中下標為n的元素的引用。如果下標越界,則丟擲out_of_range異常*/

vec.at(n);

/*---------------------------刪除元素---------------------------*/

/*刪除vec中的最後乙個元素,返回void。若vec為空,則函式行為未定義。*/

vec.pop_back();

/*刪除迭代器p所指向的元素,返回指向被刪除元素之後元素的迭代器;若p指向最後乙個元素,則返回尾後迭代器;若p是尾後迭代器,則函式行為未定義。*/

vec.erase(p);

/*刪除迭代器b和e範圍內的元素,返回指向最後乙個被刪除元素之後元素的迭代器;若e本身就是尾後迭代器,則函式也返回尾後迭代器。*/

vec.erase(b, e);

/*刪除vec中所有的元素,返回void*/

vec.clear();

建立可變大小的CDialog Bar

說明 翻譯時忽略了在mfc4.0以前版本中的所採用的方法。問題敘述 mfc實現的cdialogbar在floating狀態的時候是不允許改變大小的。如果dialog bar包含有需要動態改變大小的控制項,我們就可以使用下面介紹的方法來改變dialog bar的大小。方法 在mfc4.0以後,cont...

建立可變大小的CDialog Bar

說明 翻譯時忽略了在mfc4.0以前版本中的所採用的方法。問題敘述 mfc實現的cdialogbar在floating狀態的時候是不允許改變大小的。如果dialog bar包含有需要動態改變大小的控制項,我們就可以使用下面介紹的方法來改變dialog bar的大小。方法 在mfc4.0以後,cont...

C STL中的容器 Vector

c stl中的verctor好比是c語言中的陣列,但是vector又具有陣列沒有的一些高階功能。與陣列相比,vector就是乙個可以不用再初始化就必須制定大小的邊長陣列,當然了,它還有許多高階功能。要想用vector首先得包含標頭檔案vector。如果vector的元素型別是int,預設初始化為0 ...