我有一个矢量向量来建立一个整数映射,我希望通过执行以下操作,只要抛出一个向量超出范围的错误:
vector< vector<int> > agrid(sizeX, vector<int>(sizeY));
try {
agrid[-1][-1] = 5; //throws an out-of-range
}
catch (const std::out_of_range& e) {
cout << "Out of Range error.";
}
但是,我的代码似乎根本没有捕获错误。它似乎仍然想运行std :: terminate。有谁知道这有什么意思?
答案 0 :(得分:19)
如果您希望它抛出异常,请使用std::vector::at
1 而不是operator[]
:
try {
agrid.at(-1).at(-1) = 5;
}
catch (const std::out_of_range& e) {
cout << "Out of Range error.";
}
1 - 返回对指定位置pos
的元素的引用,并检查边界。如果pos
不在容器范围内,则抛出类型std::out_of_range
的异常
答案 1 :(得分:3)
std :: vector :: operator [](size_type)不应用任何范围检查(这很好)。函数std :: vector :: at(size_type)可以做(这对懒惰程序员很有用)。因此,确保适当的范围或首先检查并抛出一些有用的异常(如果你真的必须这样做)。
(注意:在调试编译中它可能不同)