捕捉向量矢量的out_of_range

时间:2013-10-07 17:26:46

标签: c++ exception vector error-handling outofrangeexception

我有一个矢量向量来建立一个整数映射,我希望通过执行以下操作,只要抛出一个向量超出范围的错误:

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。有谁知道这有什么意思?

2 个答案:

答案 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)可以做(这对懒惰程序员很有用)。因此,确保适当的范围或首先检查并抛出一些有用的异常(如果你真的必须这样做)。

(注意:在调试编译中它可能不同)