我有一个 vector vector 来建立一个整数映射,我很想在抛出一个 vector 超出范围的错误时通过执行以下操作来捕获它:
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。有谁知道这是怎么回事?
最佳答案
如果您希望它抛出异常,请使用 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
类型的异常
关于c++ - 在 vector 的 vector 上捕获 out_of_range,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19231015/