Создание вектора структур, выражение: нижний индекс вектора вне диапазона - PullRequest
0 голосов
/ 29 июня 2018

Я очень новичок в c ++ и в настоящее время пытаюсь выполнить несколько небольших задач, чтобы освоиться с более простыми аспектами.

Я пытаюсь создать массив (найдена информация, позволяющая предположить, что векторы одинаковы и лучше) структур для хранения данных о 10 человек. У каждого человека есть «индекс» (для идентификации person1, person2, person3 и т. Д.), «Num» (для хранения собранных данных) и «rank» (переменная, которую я намерен использовать для сортировки людей, использующих собранные данные)

Код не показывает никаких ошибок перед компиляцией, однако, когда вводится первая часть данных, я получаю следующее сообщение:

"Ошибка отладочного подтверждения!

Программа: C: \ WINDOWS \ SYSTEM32 \ MSVCP140D.dll Файл: d: \ program files \ microsoft visual studio \ community \ vc \ tools \ msvc \ 14.12.25827 \ include \ vector Линия: 1795

Выражение: нижний индекс вектора вне диапазона "

Я попытался выполнить поиск по нескольким потокам, но не могу понять, почему возникает эта проблема.

Мой код:

#include <iostream>
#include <string>
#include <vector>

using namespace std;

struct person
{
    int index; /*person number*/
    int num; /*number of pancakes eaten*/
    int rank; /*rank used for sorting people*/
};

vector<person> people; /*create a vector (array) of "person"'s*/

void getData()
{
    cout << "You will be asked to enter data from 10 different people" << endl;
    cout << "\n" << "The question is; 'How many pancakes did they eat for breakfast?'" << endl;
    cin.get();

    for (int i = 1; i <= 10; i++)
    {
        system("CLS");
        int j;
        cout << "Person " << i << " : ";
        cin >> j;

        person temp;

        people.push_back(temp);

        people[i].index = i;
        people[i].num = j;
        people[i].rank = i;
    }
}

int main()
{
    getData(); /*collect data for the people*/

    system("CLS");

    cout << "Data Collected : " << endl;

    system("pause");
}

Заранее спасибо всем, кто может помочь.

1 Ответ

0 голосов
/ 29 июня 2018

Проблема в вашей индексации. Индекс начинается с 0 , а не 1 . Итак, что происходит, когда вы нажимаете на первый элемент, он сохраняется на people[0]. Затем вы пытаетесь получить доступ к people[1], начиная с i = 1. Следовательно, индекс находится вне диапазона ошибки.

Вам необходимо изменить код так:

....
for (int i = 0; i < 10; i++)
{
    system("CLS");
    int j;
    cout << "Person " << i << " : ";
    cin >> j;

    person temp;

    people.push_back(temp);

    people[i].index = i;
    people[i].num = j;
    people[i].rank = i;
}
....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...