2016-07-23 6 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が最初挿入時にインクリメントされるように、理由を理解することができ、第2のインサートを含む後のコアダンプをしない生成されたダンプ。STLベクトルイテレータ

+0

いいえ、 'itr'は'挿入によってインクリメントされることはありません、あなたの問題を解決するには、あなただけ返された値でitrをreasignする必要があります'呼び出し。 – Xarn

答えて

2

ベクトルが空になるため、最初のv.insert(itr,10,100);はサイズを大きくしてイテレータを無効にするため、イテレータが無効になっているため2番目の挿入が失敗します。

+0

助けてくれてありがとう、コードの後に​​働いた: - 最初の挿入と2番目の挿入の間に次のステートメントを追加した後に働いた。 itr = v.begin()+ 10; これは、イテレーターポインターを使用するたびにbegininnignを参照して使用する必要があることを意味します。 –

2

あなたの好きなところには返品タイプがあります。別の解決策は、ベクターのためのスペースを確保することである

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

最初の1つは仕事をしていない、もう1つは働いていた.. –

関連する問題