从索引中捕获异常

时间:2013-05-19 17:11:58

标签: c++ class exception exception-handling try-catch

我有一些我无法编​​辑的主文件。有一些事情要做,我正在编写适合主文件的类。 v1对象是我自己的向量类的一个实例。

在主要的某些方面我有这条线。

try {
    // trying to get the element at(4)
    // should give an error
    cout << v1[4] << endl;
} catch (const string & err_msg) {
    cout << err_msg << endl;
}

我的v1向量的大小为“3”因此程序崩溃,因为我要退出索引。在这里可以接受错误。但是如何在程序崩溃之前获得cout行的异常?我不允许编辑该主代码。我需要对头文件或类定义做一些事情。感谢。

1 个答案:

答案 0 :(得分:1)

在不修改主代码的情况下,您应该编写自己的矢量类来检查operator[]中的边界。

类似的东西:

template <typename T>
class MyVector
{
  T *data;
  int length;

  ...

  T &operator[](int i)
  {
    if (i < 0 || i >= length)
       throw std::string("Out of bounds!"); //throw std::out_of_range;
    else
       return data[i];
  }
  ...
};

否则,如果您使用std::vector,则可以使用at代替[]

  

返回对指定位置pos处元素的引用。边界   执行检查,std :: out_of_range类型的异常将是   无效访问时抛出。