vector容器易錯知識點集錦

2021-07-05 11:33:30 字數 2381 閱讀 4363

關於vector容器的基本知識點很多很雜,這裡我將著重介紹vector容器的易錯且重要的知識點(本篇部落格適合初學者檢視,能迅速了解全面理解vector容器使用細則及注意點)

1、vector容器下標操作不會像陣列一樣新增元素

**講解:*vector<int> ivec;

for(vector<int> :: size_type ix=0; ix!=10;++ix)*

類似上面一段**試圖在ivec中插入0-910個元素,其實不然,原因是必須是已存在的元素的才能用下標操作符進行索引,通過下標操作進行賦值時,不會新增任何元素。

2、vector容器的const_iterator迭代器和const的vector容器iterator迭代器區別。

講解:(1)對於const_iterator迭代器中重點指的是其中的物件是const型別,所以可以對迭代器進行自增以及使用解引用操作符進行取值,但是不能夠對其中的元素進行賦值,即其中的物件是不能夠修改的。(2)const的iterator迭代器,就是指的是迭代器本身是const型別,注意的便是宣告迭代器是需要初始化。並且一旦初始化之後便不能夠改變它的值。

3、在vector容器中新增元素需要注意的知識點

vector容器新增元素,可以使用push_back(t)函式,但是不可以使用push_front(t)函式,(順序容器list和deque可以使用push_front(t)函式),另外insert(p,t)函式可以在vector容器的任意位置新增新元素,它的意思是在迭代器p所指向的元素的前面插入值為t的新元素。但是值得注意的是返回值指向新新增元素的迭代器。關於這點**演示如下:

vector<string> ivec;

vector<string> :: iterator iter=ivec.begin();

while(cin>>word)//這段**就是利用了這一點給空的ivec通過while迴圈新增元素。

4、vector容器訪問元素需要注意的知識點

**講解:*if(!ivec.empty())*

上段**中val和val2是相等的,last和last2是相等的。就是front函式是指向ivec的第乙個元素,而back函式是指向ivec的最後乙個元素。其次對於vector容器還可以通過at()函式在任意位置新增新元素。

5、vector容器刪除元素操作需要注意的知識點

**講解:vector<string> :: iterator elem1,elem2;

elem1=find(ivec.begin(),ivec.end(),val1);

elem2=find(elem1,ivec.end(),val2);

ivec.erase(elem1,elem2);

在這段**中需要注意兩點:(1)對於erase()函式來說它是有返回值的它的返回值是指向刪除元素後面的元素,如果elem2指向的是超出末端的先乙個位置的迭代器,則返回值的迭代器也是指向容器的超出末端的下乙個位置;(2)上面呼叫erase()函式刪除的是迭代器elem1開始一直到elem2之間所有元素,包含elem1,但是不包含elem2。

6、vector容器的size()函式和capacity()函式的區別

講解:size()函式指的是容器當前擁有的元素的個數,而capacity()函式指的則是容器在必須分配新記憶體空間之前可以儲存的元素總數。**講解如下:

vector<int> ivec;

cout<< 「ivec size:」<< ivec.size();

cout<<」ivec capacity:」<< ivec.capacity() << endl;

//上面**自然輸出的兩個值都是0,因為其中還沒有新增元素。

for(vector<int> size_type ix=0;ix!=24;++ix)

cout<<」ivec size:」<< ivec.size();

cout<<」ivec capacity:」<< ivec.capacity()<< endl;

//這時輸出的結果:ivec size:24 ivec capacity:32

顯然結果就不同了,而且capacity一般比size的值要大。

7、vector容器迭代器失效知識點詳解注意

講解:關於插入和刪除等操作一般易引起迭代器失效。比如:(1)insert()操作,插入點之後所有的迭代器失效,但是如果引起記憶體重分配,則所有迭代器失效;(2)erase()操作,刪除點之後所有迭代器失效;(3)push_back()操作一般不會引起迭代器失效,但是如果引發記憶體重分配,則所有迭代器失效。(4)vector的reserve()操作會使得迭代器全部失效(引起了記憶體重分配);(5)swap()操作不會使得迭代器失效。

C易錯知識點

參考酷客網,對其進行了簡單整理 1 下面的程式並不見得會輸出 hello std out 你知道為什麼嗎?include include intmain return 0 參 stdout 和stderr 是不是同裝置描述符。stdout 是塊裝置,stderr 則不是。對於塊裝置,只有當下面幾種情...

Java 易錯知識點

1 以下程式執行的結果是 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 classx classy publicclasszextendsx publicstaticvoidmain string args zyxx zyxy yxyz xyz...

jsp易錯知識點

1.http請求包括 方法 uri 協議 版本,請求頭,請求正文 http應答包括 協議 狀態 描述,應答頭,應答正文 2.jsp常用三種指令 page指令 page 定義網頁依賴屬性 taglib指令 taglib 引入標籤庫 include指令 include 包含其他檔案 3.九大內建物件 4...