C ++, при получении значений из списка, который я заполняю, массивы внутри ничего не возвращают

Хорошо, так что для проекта в моем классе алгоритмов, я полагаю, прочитал из файла .txt все точки в карте Диснейленда, а затем использовал алгоритм prims для решения проблемы MST.

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

мой код: http://pastebin.com/rS6VJ6iJ

disneyland.txt: http://pastebin.com/f78D0qrF

Output:
//testing arrays' value before pushing into list

id: 1 ,x: 957 ,y: 685 ,name: RailRoadMainStreet
id: 2 ,x: 1009 ,y: 593 ,name: MainStreetCinema
id: 3 ,x: 930 ,y: 661 ,name: FireEngine
id: 4 ,x: 991 ,y: 665 ,name: HorseDrawnStreetcars
id: 5 ,x: 945 ,y: 673 ,name: HorselessCarriage
id: 6 ,x: 1038 ,y: 668 ,name: Omnibus
id: 7 ,x: 1062 ,y: 670 ,name: DisneyGallery
id: 8 ,x: 1063 ,y: 649 ,name: GreatMomentsWithMrLincoln
id: 9 ,x: 969 ,y: 562 ,name: BlueRibbonBakery
id: 10 ,x: 968 ,y: 579 ,name: CarnationCafe
... to 84 id

//now retreving values from list after been pushed(empty)
id:  ,x:  ,y:  ,name:
id:  ,x:  ,y:  ,name:
id:  ,x:  ,y:  ,name:
id:  ,x:  ,y:  ,name:
id:  ,x:  ,y:  ,name:
id:  ,x:  ,y:  ,name:
id:  ,x:  ,y:  ,name:
id:  ,x:  ,y:  ,name:
id:  ,x:  ,y:  ,name:
id:  ,x:  ,y:  ,name:
id:  ,x:  ,y:  ,name:
id:  ,x:  ,y:  ,name:
id:  ,x:  ,y:  ,name:
id:  ,x:  ,y:  ,name:
id:  ,x:  ,y:  ,name:
id:  ,x:  ,y:  ,name:
id:  ,x:  ,y:  ,name:
... to 84 id

я знаю, что это что-то глупое, но я просто не могу понять это в данный момент.

редактировать:

теперь я получаю дрянь, потому что в конце программа читает пустую строку для файла, который я не хочу читать, потому что нет значений
jibberish:
id: 84 1222 422) omorrowTurnlandTerrace ӿ

обновлена ​​часть кода, которая вызывает ошибки:

if (data.is_open())
{
while (!data.eof())
{

getline(data,output);

if (counter == 0) //grabbing the total amount of vertcies
{
total = atoi(output.c_str());
}else if(counter == total+1){
//no nothing , blank line. THIS IS CAUSING ERRORS
}
else{ // now parsing line into an array then pushing it into the remaining list.infoVert = new string[4];
temp = parseLine(infoVert,output,' ');
tmpVert.push_front(temp);}
counter++;

}
}

//---------------------
//cleaning up the mess.
data.close();
delete [] infoVert;
//---------------------

0

Решение

Проблема в том, что вы удаляете массив, который вы добавили в список

string* parseLine(string* ary,string line,char delim)
{
...
return ary;
}

infoVert = new string[4];
getline(data,output);
temp = parseLine(infoVert,output,' ');
cout << "id: " << temp[0] << " ,x: " << temp[1] << " ,y: " << temp[2] << " ,name: " << temp[3] << endl;
rVert.push_front(temp);
delete [] infoVert;

смотреть на parseLine то, что написано означает temp == infoVertтак что на самом деле вы толкаете infoVert в ваш список, но на следующей строке вы удаляете infoVert,

Вы могли бы просто не delete[] infoVert но на самом деле у вас должен быть список векторов вместо списка указателей.

list<vector<string> > rVert;
list<vector<string> > tVert;

Программирование проще без использования указателей.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]