创建结构,表达式的向量:向量下标超出范围

时间:2018-06-29 00:13:49

标签: c++ arrays vector struct

对于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 :(得分:0)

问题出在索引上。索引从 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;
}
....