读数字到矢量

时间:2012-04-19 20:02:06

标签: c++ input vector

我正在努力奋斗。基本上,我必须首先阅读一个数字:

int n;
scanf("%d", &n);

然后我必须读取N个区间到一个向量:

vector< vector<int> > intervals;
int a, b;
for (int i = 0; i < n; i++) {
  scanf("%d %d", &a, &b);
  intervals.at(i).at(0) = a;
  intervals.at(i).at(1) = b;
}

使用GDB调试器,我得到了这个:

3
1 4
terminate called after throwing an instance of 'std::out_of_range'
  what():  vector::_M_range_check

Program received signal SIGABRT, Aborted.
0x00007ffff7260c35 in raise () from /lib/libc.so.6
(gdb) 

知道我做错了什么吗?谢谢!

2 个答案:

答案 0 :(得分:4)

您正在使用at来存储尚不存在的向量元素。

最简单的解决方法是使用push_back将新元素放入向量中 - 这就是它的设计目标。由于你有两个维度,你需要使用它两次。

答案 1 :(得分:2)

intervals.at(i).at(0) = a;

非法,因为你的矢量最初是空的。您可以使用push_back或预先分配矢量。

我会预先分配矢量,因为这不需要在push_back上进一步重新分配:

vector< vector<int> > intervals(n);
int a, b;
for (int i = 0; i < n; i++) {
  scanf("%d %d", &a, &b);
  intervals.at(i).push_back(a);
  intervals.at(i).push_back(b);
}