Имеется код:
struct St
{
string Name;
int math;
int phys;
int inf;
int chem;
int dateOfBirth;
int group;
double ball;
} Students;
void showNeedableStudents() {
vector <St> v;
v.reserve(10);
ifstream file1("list.txt");
ofstream file2("result.txt");
cout << "Enter the needable group: " << endl;
int input_group = input();
cout << "Enter the math mark u want: " << endl;
int input_math = input();
cout << "Enter the phys mark you need: " << endl;
int input_phys = input();
cout << endl;
int amount = 0;
int i = 0;
cout << "\t\tFound students:" << endl;
while (file1 >> Students.Name >> Students.math >> Students.inf
>> Students.phys >> Students.chem >> Students.dateOfBirth
>> Students.group >> Students.ball) {
if (Students.group == input_group && Students.math >= input_math && Students.phys >= input_phys) {
amount++;
v.at(i).Name = Students.Name;
v.at(i).math = Students.math;
v.at(i).inf = Students.inf;
i++;
}
}
for (i = 0; i < v.size(); i++) {
cout << Students.Name << endl;
}
if (amount == 0) {
cout << "There are no students with such marks in group!" << endl;
}
file1.close();
file2.close();
}
double input() {
int a = 0;
while (true) {
cin >> a;
if (!cin.good()) {
cout << "Wrong input. Please try again!" << endl;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
else break;
}
return a;
}
Задача - считывание данных из файла в вектор структур. Однако при выполнении, выдаёт исключение std::out_of_range. В чём ошибка?
std::vector::reserve
только увеличивает емкость вектора, но не "размер". И это не дает права обращаться к первому или второму элементу. Если заменить на resize
, то все скорее всего заработает сразу.
но есть лучше способ. Вот этот код
v.at(i).Name = Students.Name;
v.at(i).math = Students.math;
v.at(i).inf = Students.inf;
i++;
заменить на
v.push_back(Students);
i++;
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Столбец excel содержит числа в диапазоне от 1 до 00001
Есть ли быстрый способ запустить командно одну из закладок Google Chrome?