0

我正在努力解决这个问题。基本上,我必须先阅读一个数字:

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) 

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

4

2 回答 2

4

at用于存储尚不存在的向量元素。

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

于 2012-04-19T20:04:08.060 回答
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);
}
于 2012-04-19T20:04:23.080 回答