从无法到达的矢量错误中恢复

Recover from an vector out of reach error

本文关键字:错误 恢复      更新时间:2023-10-16

是否有可能从c++中的矢量"不可及"错误中恢复?

像这样的函数:

vector<int> numbers;
bool isAccessable(int i)
{
   try
   {
  numbers[i];
   catch (...)
    {
    return false;
    }
return true;
}

在c#中是可能的,但c++呢?

如果您只想检查索引是否在范围内,则只需:

return i < numbers.size();

(也应该与0比较,或者将索引更改为unsigned类型;size_t是通常用于数组索引的类型。

如果您想尝试访问该值,并在索引超出范围时抛出异常,则使用at而不是[]:

try {
    do_something_with(numbers.at(i));
    return true;
} catch (std::out_of_range const &) {
    return false;
}

在c++中,对于operator[]没有范围检查,但是对于vector::at()有。

numbers.at(i);

使用std::vector::at()成员函数。它抛出一个out_of_range异常