使用需要包含標頭檔案 #include
vector是乙個模板類,所以需要用vectora或者vectorb這種方式宣告。
vector的常用操作:
int len = a.size();//返回vector長度
a.resize(100);//把a長度變為100
a.push_back(10)//把10新增到尾部
a.pop_back();//刪除最後乙個元素
a.clear();//清除a
bool is_kong = a.empty();//判斷a是否空
vector
成員函式函式
表述 c.assign(beg,end)
c.assign(n,elem) 將
[beg; end)
區間中的資料賦值給c。
將n個elem
的拷貝賦值給c。
c.at(idx)
傳回索引
idx所指的資料,如果
idx越界,丟擲
out_of_range。
c.back()
傳回最後乙個資料,不檢查這個資料是否存在。
c.begin()
傳回迭代器中的第乙個資料。
c.capacity()
返回容器中資料個數。
c.clear()
移除容器中所有資料。
c.empty()
判斷容器是否為空。
c.end()
指向迭代器中的最後乙個資料位址。
c.erase(pos)
c.erase(beg,end)刪除
pos位置的資料,傳回下乙個資料的位置。
刪除[beg,end)
區間的資料,傳回下乙個資料的位置。
c.front()
傳回第乙個資料。
get_allocator
使用建構函式返回乙個拷貝。
c.insert(pos,elem)
c.insert(pos,n,elem)
c.insert(pos,beg,end)在
pos位置插入乙個
elem
拷貝,傳回新資料位置。
在pos
位置插入n個
elem
資料。無返回值。
在pos
位置插入在
[beg,end)
區間的資料。無返回值。
c.max_size()
返回容器中最大資料的數量。
c.pop_back()
刪除最後乙個資料。
c.push_back(elem)
在尾部加入乙個資料。
c.rbegin()
傳回乙個逆向佇列的第乙個資料。
c.rend()
傳回乙個逆向佇列的最後乙個資料的下乙個位置。
c.resize(num)
重新指定佇列的長度。
c.reserve()
保留適當的容量。
c
.size()
返回容器中實際資料的個數。
c1.swap(c2)
swap(c1,c2)將
c1和c2元素互換。
同上操作。
vectorc
vector c1(c2)
vector c(n)
vector c(n, elem)
vector c(beg,end)
c.~ vector ()
建立乙個空的
vector
。 複製乙個
vector
。 建立乙個
vector
,含有n
個資料,資料均已預設構造產生
。 建立乙個含有n個
elem
拷貝的vector
。 建立乙個以
[beg;end)
區間的vector
。 銷毀所有資料,釋放記憶體。
vector
操作函式
描述 operator
返回容器中指定位置的乙個引用。
補充:
查詢,find不屬於vector的成員,而存在於演算法中,應加上標頭檔案#include :
int main( )
按值刪除
vector不像list有成員函式list.remove(value),只有erase()按位置進行刪除操作,當不知道位置但想直接刪除某個值時要用erase配合remove(裡面的)來實現 1.
remove演算法工作時並不是直接把元素刪除,而是用後面的元素替代前面的元素,也即是說如果我對1234這個序列remove 2,返回的序列是 1344(3被複製到2的位置,4被複製到3的位置)。
這樣上面的例子就好解釋了,那兩個3的元素並沒有被移除,而是用後面的元素覆蓋了前面的元素。多出的那兩個數沒有被移除掉而已。
那麼我們應該如何真正完成移除呢?remove函式會返回乙個迭代器,那個迭代器是這個序列的邏輯終點。所以可以再配合erase完成操作:
numbers.erase(remove(numbers.begin(), numbers.end(), 2), numbers.end());
2.
remove還有複製的過程對於某些特殊情況下可以不用,比如vector的要刪除的某個值只有1個,這時候可以find()(裡面的)配合erase來實現刪除操作:
比如對1234這個序列刪除2可以:(如果find沒找到將返回.end())
numbers.erase(find(numbers.begin(),numbers.end(),2));
ps:用迭代器從開端迴圈找value然後再erase,用得不好會產生野指標,從而錯誤。
反轉容器元素:
用reverse(vector.begin(),vector.end()),比如在最短路演算法中求解最短路徑可以這樣用:
如果不是改變原來的容器,而是翻轉之後放在新容器裡面,直接用:
vectorget_path(int t)
reverse_copy ( bidirectionaliterator first, bidirectionaliterator last, outputiterator result ); 不定長陣列 vector
vector是乙個不定長陣列模板類,所以需要用vectora或者vectorb這樣的方式來進行宣告乙個vector。vector是乙個類似於int a的整數陣列,而vector就是乙個類似於string a的字串陣列。使用vector時要加 include標頭檔案 常用的vector陣列的方法有 i...
不定長陣列 vector
1.vector 在使用它時,需要包含標頭檔案vector,include.vector 容器與陣列相比其優點在於它能夠根據需要隨時 自動調整自身的大小以便容下所要放入的元素,提供了許 多的方法來對自身進行操作.2.初始化 vectora 宣告乙個int型向量a vectora 10 宣告乙個初始大...
vector 不定長陣列
vector 不定長陣列 include 用vector可以定義乙個不定長的陣列,它是乙個模板類,所以在定義乙個物件的時候需要說明物件的資料型別,比如vectora 定義了乙個int型別的a陣列。vector string a 定義了乙個string型別的a陣列,a陣列中的每個元素都是乙個strin...