c++ - C++中的二维向量数组
问题描述
该程序启动,但是在输入数据时,它会抛出一个错误(在 Visual Studio 中:表达式:向量下标超出范围)
我一定是做错了什么,但我对向量数组很陌生,所以我正在努力学习他们;)
另外,我想知道,当向量数组的大小未知时(可能会有所不同),使用什么循环条件
#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();
}
感谢帮助 ;)
解决方案
有两个问题。首先,向量没有被初始化。默认情况下,向量有 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();
}
推荐阅读
- error-handling - VS 2017 C1083 无法打开包含文件:'pcl/io/openni2_grabber.h'
- wpf - 将图标添加到带有样式的菜单中
- android - AndroidRuntime:java.lang.RuntimeException:无法实例化活动 ComponentInfo{.../....MainActivity}:java.lang.ClassNotFoundException:
- android - 自定义按钮 - 为什么带有 png 图像的 StateListDrawable 摆脱了默认按钮 StateListAnimator,而 xml 形状保留了它?
- python - setuptools 何时将可编辑链接安装到 /.../my_module/build/lib/ 以及何时链接到 /.../my_module?
- asp.net-mvc - IIS express 未运行 MVC 站点,未在 applicationhost.config 中创建站点
- ios - Swift iOS - 如何在单元格的 superView 中获取按钮框架
- php - `where in` 只取存储过程 mysql 中的第一个值
- android - 在 Android 中执行 oAuth 1.0 API
- javascript - Wordpress Owl Carousel 不显示自定义帖子类型