程序在尝试创建和访问二维矢量时崩溃
Program crashes when trying to create and access 2-d vector
我正在尝试创建一个二维向量来表示家庭作业的方阵。尽管程序编译成功,但当我尝试运行它时,程序会崩溃,并且不会返回任何输出。
有人能向我解释一下我的错误吗?
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
vector < vector<int> > a;
a[0][0] = 0;
a[0][1] = 1;
cout<<a[0][0]<<a[0][1];
cout<<a.size();
}
在变量声明后添加打印语句,如下所示,并运行程序。你也许可以自己找到答案。
int main()
{
vector < vector<int> > a;
cout<<a.size();
a[0][0] = 0;
a[0][1] = 1;
cout<<a[0][0]<<a[0][1];
cout<<a.size();
}
问题是,当使用向量时,必须为要存储的元素数量分配内存。(好吧,也使用数组,但在静态创建数组时,这有点隐含)当没有盒子时,你不能说你想把东西存储在盒子里。
我可以想出两种方法来为这些元素腾出空间。一种是使用如下构造函数:
std::vector<int> myVector(100); // This makes room for a 100 elements
并为此目的使用函数。
std::vector<int> myVector;
myVector.reserve(100); // This makes room for a 100 elements after the declaration
所以,从那里,我想你可以弄清楚接下来会发生什么。你只需要为所有东西腾出空间。
我个人不太使用Vector,因为我从来没有被要求(在学校里我必须制作自己的动态列表,基本上把它用作我的"Vector"库),但我绝对应该在需要的时候使用它,因为它有很多优点。
作为一个通知,我知道的一件事是,您正在使用不安全的方式访问矢量中的数据。不安全,因为如果它碰巧进行了限制访问,它不会向您抛出任何异常来捕获。
std::vector<int> myVector(10);
myVector.at(0) = 0; // What I mean is that function, you can jut wrap it inside a try-catch to make it safer.
myVector[0] = 0; // Instead of this, of course.
当然,还有迭代器和所有这些应该更安全的东西,但您稍后可以进一步了解。
为了填充std::向量中的值,我更喜欢使用push_back函数而不是运算符[]。push_back将向量的大小增加一,如果需要,还可以执行内存重新分配。请记住,只有当内存重新分配不是问题时,此解决方案才是好的。最好在push_back之前保留内存。
相关文章:
- 将二维矢量传递给类
- 将值从二维数组输出到文本文件
- 我在二维向量中是否正确分配了内存
- 带结构的二维矢量:如何存储元素
- 在二维数组中查找最小值和最大值?
- 移动二维数组中的字符
- C++ 传递二维字符数组
- 如何正确填充在堆上分配的二维数组?
- 传递二维数组时出现问题
- 具有随机数的二维数组不会更改
- 如何在C++中获取二维数组中最少的一列数?
- 如何使用用户输入变量制作二维数组?
- C++ 中的二维整数数组,每行中的元素数量不均匀
- C++ 中动态二维数组的访问冲突
- 在二维向量或数组中可以存储的最大元素数是多少?
- 如何将整数字符串转换为整数的二维向量?
- 二维矢量数据成员
- 遍历二维数组的所有子数组
- 程序在尝试创建和访问二维矢量时崩溃
- 创建结构的二维数组会导致崩溃