我正在为此而苦苦挣扎。基本上,我必须先读一个数字:
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)
你知道我做错了什么吗?谢谢!
发布于 2012-04-20 04:04:23
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-20 04:04:08
您正在使用at
来存储到向量中尚不存在的元素。
最简单的解决方法是使用push_back
将新元素放入向量中-这就是它设计的目的。你需要使用它两次,因为你有两个维度。
https://stackoverflow.com/questions/10235852
复制相似问题