Есть ли вставка элементов в вектор повреждает указатель на вектор?

В программе для имитации логических элементов я переключился с использования массивов

node N[1000];

на векторы

vector<node> N;

И моя программа работала отлично до использования векторов, но теперь он выводит неверные результаты, поэтому я попытался отладить и обнаружил, что ошибка возникает здесь:

node* Simulator::FindNode(string h)
{
    int i;
    for(i = 0; i < NNodes; i++)
    {
        if (N[i].getname() == h)
        {
            return &N[i];
        }
    }

    node n ;
    N.push_back(n);
    N[NNodes].setname(h);
    NNodes++;
    return &N[NNodes-1]; //why?because of NNodes++  
}

// ...

node* inp1;
node* inp2;
node* out;
string NodeName;

inp_file >> NodeName;
inp1 = FindNode(NodeName);
s1 = inp1;

inp_file >> NodeName;
inp2 = FindNode(NodeName); //inp1 is destroyed here 

inp_file >> NodeName;
out = FindNode(NodeName); //inp2 and inp1 are destroyed here 

При первом вызове FindNode первый указатель inp1 указывает на правильное место, которое & N [0] .

При повторном вызове FindNode 1-й указатель inp1 указывает на мусор, а второй указатель inp2 указывает на правильное место & N [1] .

При вызове FindNode в третий раз оба 1-й и 2-й указатели ( inp1 , inp2 ) указывают на мусор! И третий указатель указывает на правильное место.

Почему это произошло?
Как работает вектор, когда я вставляю в них элементы, и какие указатели я должен использовать, чтобы указывать на элементы векторов?

5
задан GManNickG 15 August 2010 в 19:35
поделиться