捕捉向量矢量的out_of_range

Dav*_*han 14 c++ error-handling exception vector 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.";
}
Run Code Online (Sandbox Code Playgroud)

但是,我的代码似乎根本没有捕获错误.它似乎仍然想运行std :: terminate.有谁知道这有什么意义吗?

Lih*_*ihO 20

如果您希望它抛出异常,请使用1而不是:std::vector::atoperator[]

try {
    agrid.at(-1).at(-1) = 5;
}
catch (const std::out_of_range& e) {
    cout << "Out of Range error.";
}
Run Code Online (Sandbox Code Playgroud)

1 - 返回对指定位置的元素的引用pos,并检查边界.如果pos不在容器的范围内,std::out_of_range则抛出类型的异常