2017-12-23 12 views
0

"a.push_back(4)"が実行時エラーを引き起こす理由を知りたい。 "a.push_back(4)"を指定しないと、実行時エラーは発生しません。アイテムを追加した後にC++ find()関数が機能しない

#include <iostream> 
#include <vector> 
#include <algorithm> 
using namespace std; 

void main() 
{ 
    vector<int> a(5); 
    a.push_back(1); 
    a.push_back(2); 
    a.push_back(3); 

    vector<int>::iterator begIt = begin(a); 
    vector<int>::iterator endIt = end(a); 

    a.push_back(4); // Once it is removed, this program will work well. 

    auto begIt2 = begin(a); 
    auto endIt2 = end(a); 

    auto findIt = find(begIt, endIt, 4); 
    if (findIt == endIt) 
     cout << "not found"; 
    else 
     cout << *findIt; 
} 
+0

プッシュバックのすべての呼び出しの後、ベクトルには[[0,0,0,0,0,1,2,3,4] 'が含まれています。あなたのコンストラクタは、* size *が5のベクトルを作成します。*容量*が5の空のベクトルを作成しようとしていると思われます。それをするには: 'ベクトル; a.reserve(5); ' –

+0

この回答は私が正確に考えるものです。私はそのコンストラクタが記憶を予約できないことを知らなかった。 – parkgibyeong

答えて

3

push_back(4)はイテレータを無効にします。そのため、このコードではエラーが発生します。

関連する問題