当我尝试运行这段代码时:
vector <string> names;
vector <string> telephones;
vector <string> emails;
for (int i = 0; i < 5;i++) {
cout << "enter name" << '\n';
getline(cin, names[i]);
cout << "enter telephone number" << '\n';
getline(cin, telephones[i]);
cout << "enter email address" << '\n';
getline(cin, emails[i]);
}它编译得很好,但是当我尝试运行它的时候,我得到了“向量下标超出范围”的错误信息。
发布于 2019-02-11 14:38:03
请定义向量的大小,因为仅定义向量不会为它们分配内存。
vector <string> names(5);
vector <string> telephones(5);
vector <string> emails(5);
for (int i = 0; i < 5;i++) {
cout << "enter name" << '\n';
getline(cin, names[i]);
cout << "enter telephone number" << '\n';
getline(cin, telephones[i]);
cout << "enter email address" << '\n';
getline(cin, emails[i]);
}发布于 2019-02-11 14:38:13
任何push或emplace函数都不会为您的向量指定起始大小或增加大小。在分配存储之前,您不能使用[]。
给
cout << "enter name" << '\n';
string temp;
getline(cin, temp);
names.push_back(temp);等等。试一试。
附注:
与其让一段数据有三个数组,不如考虑构造一个结构
struct person
{
string name;
string telephone;
string email
};然后是这个结构的一个向量。
vector<person> people;这会让你创建一个在一次破解中读取整个人的函数,使得主循环逻辑变得更简单,并且如果你将来向person添加更多的数据,需要更少的维护。
person getPerson()
{
person temp;
cout << "enter name" << '\n';
getline(cin, temp.name);
cout << "enter telephone number" << '\n';
getline(cin, temp.telephone);
cout << "enter email address" << '\n';
getline(cin, temp.email);
return temp;
}然后
for (int i = 0; i < 5;i++) {
people.push_back(getPerson());
}发布于 2019-02-11 14:42:46
你不能直接接受向量中的输入。因为当您运行getline(cin,namei)时,此向量中没有分配的'i‘索引。有两种可能的解决方案。
解决方案1,首先分配所有索引:
vector <string> names;
vector <string> telephones;
vector <string> emails;
name.resize(5);
telephones.resize(5);
emails.resize(5);
for (int i = 0; i < 5;i++) {
cout << "enter name" << '\n';
getline(cin, names[i]);
cout << "enter telephone number" << '\n';
getline(cin, telephones[i]);
cout << "enter email address" << '\n';
getline(cin, emails[i]);
}解决方案2,在运行时创建索引:
vector <string> names;
vector <string> telephones;
vector <string> emails;
for (int i = 0; i < 5;i++) {
string temp;
cout << "enter name" << '\n';
getline(cin, temp);
name.push_back(temp);
cout << "enter telephone number" << '\n';
getline(cin, temp);
telephones.push_back(temp);
cout << "enter email address" << '\n';
getline(cin, temp);
emails.push_back(temp);
}https://stackoverflow.com/questions/54625067
复制相似问题