不定長陣列 vector

2021-06-27 17:53:36 字數 3618 閱讀 7878

使用需要包含標頭檔案 #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...