0

Задача состоит в том, что-бы реализовать каталог товаров используя при этом только структуры, а не базы данных. Есть такая структура:

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, что-бы количество элементов в структуре четко соответствовало количество данных считываемых из файла?