2017-12-23 7 views
0

Ich möchte wissen, warum "a.push_back (4)" Laufzeitfehler macht. ohne "a.push_back (4)" macht keinen Laufzeitfehler.C++ find() - Funktion funktioniert nicht nach dem Hinzufügen von Elementen

#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

Beachten Sie, dass der Vektor nach allen Aufrufen, die zurückgeschoben werden sollen, "[0,0,0,0,0,1,2,3,4]" enthält. Ihr Konstruktor erstellt einen Vektor mit einer * Größe * von 5. Ich vermute, Sie haben versucht, einen leeren Vektor mit * Kapazität * von 5 zu erstellen (in diesem Fall würde Ihr Code funktionieren). Um das zu tun: 'vector a; a.reserve (5); ' –

+0

Diese Antwort ist, was ich genau denke. Ich wusste nicht, dass Konstruktor Erinnerungen nicht reservieren kann. – parkgibyeong

Antwort

3

Die push_back (4) macht Ihre Iteratoren ungültig. Deshalb erzeugt dieser Code einen Fehler.

Verwandte Themen