2016-07-23 77 views
0
#include<iostream.h> 
    #include<vector.h> 
    int main() 
    { 
      vector<int> v; 
      vector<int>::iterator itr=v.begin(); 
      v.insert(itr,10,100); 
      v.insert(itr,10,100); 
    } 

該程序包括第二插入件之後產生核心轉儲,不能夠理解爲什麼作爲ITR將在第一插入件的時間遞增。STL矢量迭代給核心轉儲

+0

沒有,'itr'會不會被'鑲遞增'電話。 – Xarn

回答

2

因爲矢量起始爲空,所以第一個v.insert(itr,10,100);增加了它的大小,從而使任何迭代器失效,因此第二次插入失敗,因爲迭代器不再有效。

+0

感謝您的幫助,在代碼之後工作: - 在第一次和第二次插入之間添加下面的語句後工作。 itr = v.begin()+ 10; 這意味着每次我想使用迭代器指針時,我將不得不引用begininnign然後使用它? –

2

插入返回類型對你有利。要解決你的問題,你只需要reasign itr與返回值:

vector<int> v; 
vector<int>::iterator itr=v.begin(); 
itr = v.insert(itr,10,100); //new begin 
itr = v.insert(itr,10,100); //new begin 

另一種方案是預留空間向量:

vector<int> v; 
v.reserve(1000); 
vector<int>::iterator itr=v.begin(); 
v.insert(itr,10,100); //itr not invalidated 
v.insert(itr,10,100); 
+0

第一個沒有工作,第二個工作.. –