#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