c++ - 在 vector 的 vector 上捕获 out_of_range

标签 c++ exception vector error-handling outofrangeexception

我有一个 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/

相关文章:

c++ - Google 测试和 std::vector 范围异常

c++ - .load(std::memory_order_relaxed) 的成本是否与读取非原子变量相同?

c# - 我应该为 "No Record Found"使用哪种异常? (C#)

C++ 模板 vector 操作重载

c++ - 使用 'auto' 删除许多 vector 元素

c# - 为什么C#编译器在catch中授权 "throw ex",有没有 "throw ex"有用的情况?

c++ - C++ 中基于枚举值的专用类构造函数

c++ - 在 c++ 中满足某些条件(如果)后,如何重新启动 while 循环?

c++ - 无法将整数写入字符串

C# 异常对象是否包含导致异常的实际值?