此程序启动,但在输入数据时抛出错误(在 visual studio 中:表达式: vector 下标超出范围)
我一定是做错了什么,但我对 vector 数组很陌生,所以我正在努力学习它们;)
另外,我想知道,当 vector 数组的大小时未知(它可能会有所不同)时使用什么循环条件
#include <iostream>
#include <conio.h>
#include <vector>
#include <string>
using namespace std;
int main()
{
vector<vector<string>> v; // 2D vector array
string stri; // Input Data
for (auto i = 0;; i++)
{
for (auto j = 0;; j++)
{
cout << "Enter array's " << i << " and " << j << " element:";
cin >> stri;
v[i][j] = stri;
}
}
for (auto i = 0;; i++)
{
for (auto j = 0;; j++)
{
cout << v[i][j] << "\t";
}
cout << endl;
}
_getch();
}
感谢您的帮助;)
最佳答案
有两个问题。首先, vector 没有被初始化。默认情况下, vector 有 0 个元素,因此当您尝试访问 v[i][j]
时,它会提示超出范围。第二,没有条件退出循环,使循环无限。假设您事先知道数组的大小,试试这个:
#include <iostream>
#include <conio.h>
#include <vector>
#include <string>
using namespace std;
int main()
{
size_t n = 4;
size_t m = 3;
vector<vector<string>> v(n, vector<string>(m)); // 2D vector array
string stri; // Input Data
for (auto i = 0; i<v.size(); i++)
{
for (auto j = 0; j<v[i].size(); j++)
{
cout << "Enter array's " << i << " and " << j << " element:";
cin >> stri;
v[i][j] = stri;
}
}
for (auto i = 0; i<v.size(); i++)
{
for (auto j = 0; j<v[i].size(); j++)
{
cout << v[i][j] << "\t";
}
cout << endl;
}
_getch();
}
如果您事先不知道尺寸,并且希望用户决定,请尝试如下操作:
int main()
{
vector<vector<string>> v; // 2D vector array
string stri; // Input Data
for (auto i = 0; ; i++)
{
v.emplace_back();
for (auto j = 0; ; j++)
{
cout << "Enter array's " << i << " and " << j << " element (Enter 'End' to end the row): ";
cin >> stri;
if(stri == "End")
break;
v[i].push_back(stri);
}
cout << "Do you want to add another row? [y/n] ";
char c;
cin >> c;
if (c == 'n')
break;
}
for (auto i = 0;i<v.size(); i++)
{
for (auto j = 0;j<v[i].size(); j++)
{
cout << v[i][j] << "\t";
}
cout << endl;
}
getch();
}
关于c++ - C++ 中的二维 vector 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55814846/