尝试创建和访问2-d向量时程序崩溃

时间:2017-02-04 06:26:24

标签: c++ stdvector

我正在尝试创建一个二维向量来表示家庭作业的方阵。虽然程序编译成功,但是当我尝试运行它时,程序崩溃并且不返回任何输出。

有人可以向我解释我的错误吗?

#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();
}

3 个答案:

答案 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之前保留内存总是更好。