Как определить конец вектора, чтобы он не продолжался бесконечно?

#c #vector

#c #вектор

Вопрос:

На данный момент у меня есть текстовый файл, содержащий информацию, относящуюся к разным исполнителям мюзиклов.

 David Byrne 1 Talking_Heads Lead-Vocals
Chris Frantz 1 Talking_Heads Drummer
Tina Weymouth 3 Talking_Heads Compass_Point_All_Stars Tom_Tom_Club Bass
  

В этом порядке указывается имя, фамилия, количество групп, в которых они были, группы, в которых они находились, и, наконец, роль в группе.
При поиске людей полосы помещаются в отображаемый вектор, но этот вектор не заканчивается, поэтому, например, при поиске Тины Веймут, он покажет предыдущие две записи, а также полосы Тины.

 while (artist >> forname >> surname >> bandnum)
    {
        for (int i = 0; i < bandnum; i  )
        {
            string tmp;
            artist >> tmp;
            band.push_back(tmp);
        }
        artist >> role;


        if (strF == forname amp;amp; strS == surname) {
            system("CLS");
            cout << "Artist found" << endl;
            cout << forname << " " << surname << " ";
            ostream_iterator<string> output_iterator(cout, " ");
            copy(band.begin(), band.end(), output_iterator);
            cout<< role << endl;
            system("pause");
        }
    }
  

Выше приведен используемый код, он должен прочитать число перед именами и создать вектор такого размера, который содержит каждую полосу, вместо этого он создает бесконечный вектор.

Ответ №1:

Вы перезаписываете значения forname , surname , bandnum и role каждый цикл, но оставляете band вектор расти и расти — сохраняя информацию о прошлых исполнителях. Вам нужно очищать и очищать его после каждого цикла!

clear() Все, что вам нужно, — это простой вызов. Просто добавьте следующую строку в начале (или в конце, если хотите) вашего цикла while:

 band.clear();
  

Вот он в действии: ideone