Задача состоит в том, что-бы реализовать каталог товаров используя при этом только структуры, а не базы данных. Есть такая структура:
struct catalog
{
string name;
int amount;
double price;
};
vector <catalog> all;
А вот сама функция, в которой мы сначала считываем данные из файла, а потом выводим их на экран в виде некой таблицы:
void items_catalog()
{
all.resize(50); //Данная строчка кода делает некоторый костыль
ifstream fin("assortiment.txt");
for (int i = 0; !fin.eof(); i++)
{
//вот тут пытаюсь вставить all.push_back(); но он не работает
getline(fin, all[i].name, '\t');
fin >> all[i].price >> all[i].amount;
}
fin.close();
cout << "Наименование товара" << " " << "Стоимость товара за условную единицу" << " " << "Остаток на складе: " << endl;
for (int i = 0; i < all.size(); i++)
{
cout << all[i].name << " " << all[i].price << " " << all[i].amount << endl;
}
}
Если использовать resize в качестве костыля и задать заранее в векторе запас на 50 элементов вперед, то это во-первых расточительство памяти, во-вторых при выводе каталога товаров отображаются сразу 50 строчек, поскольку выводятся и не использованные элементы, по умолчанию инициализированные нулем.
Пример текста в файле, откуда программа считывает данные в структуру:
Говядина 90 20.0
Свинина 70 30.0
Курятина 50 40.0
Вопрос заключается в том, как увеличивать размер вектора при каждой итерации цикла for, что-бы количество элементов в структуре четко соответствовало количество данных считываемых из файла?
push_backне работает? А если так:for (catalog tmp; getline(fin, tmp.name, '\t') && (fin >> tmp.amount >> tmp.price); ) all.push_back(tmp);? 2)!fin.eof()Не делайте так.