c++ - 创建结构体向量,表达式:向量下标超出范围
问题描述
我对 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");
}
提前感谢任何可以提供帮助的人。
解决方案
问题在于您的索引。索引从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;
}
....
推荐阅读
- java - 只允许本地连接。Chrome 无法启动:崩溃。(未知错误:DevToolsActivePort 文件不存在
- c# - 只要函数 B 在 C# (控制台应用程序)中执行,如何运行函数 A
- java - 单元测试 Spring Cloud Stream Producer-Processor-Consumer 场景
- javascript - 无法在 onclick 回调中使用流
- google-apps-script - 计算列中出现的次数
- spring-integration - Spring Boot 中的 SFTP 集成流程
- gremlin - 如何使用 gremlin 按度数对节点进行排序?
- c - 客户端无法连接到另一台机器上的服务器 - 已解决
- javascript - 获取动态添加的脚本标签的值
- dart - 为什么在这里@override 的“get”?(Dart 中的语法)