我正在尝试创建一个二维向量来表示家庭作业的方阵。虽然程序编译成功,但是当我尝试运行它时,程序崩溃并且不返回任何输出。
有人可以向我解释我的错误吗?
#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();
}
答案 0 :(得分:2)
在变量声明后添加打印语句如下,并运行程序。你也许可以自己找到答案。
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();
}
答案 1 :(得分:0)
问题是,使用矢量时,必须为要存储的元素数分配内存。 (好吧,也使用数组,但在静态创建数组时会隐含这种情况)你不能继续说你想在没有盒子的时候把东西存放在盒子里。
我可以通过两种方式为这些元素腾出空间。一个是使用构造函数,如:
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因为我从来没有被要求(必须在学校制作我自己的动态列表,并且基本上将其用作我的&#34; Vector&#34;库),但我绝对是应该在需要时使用它,因为它提供了很多优点。
正如通知一样,我知道的一件事是您使用不安全的方式访问向量中的数据。不安全,因为它不会抛出任何异常,以便在碰巧进行限制访问时捕获。
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.
当然,那里有迭代器和所有应该更安全的东西,但是你可以稍后再深入了解。
答案 2 :(得分:0)
为了填充std :: vector中的值,我更喜欢使用push_back函数而不是operator []。 push_back将vector的大小增加1,并且如果需要还可以执行内存realloaction。请记住,只有内存重新分配不是问题,这个解决方案才是好的。在push_back之前保留内存总是更好。