我正在努力奋斗。基本上,我必须首先阅读一个数字:
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)
知道我做错了什么吗?谢谢!
答案 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);
}