-3

我有一些无法编辑的主文件。有一些事情要做,我正在编写适合主文件的类。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 行的异常?而且我不允许编辑该主代码。我需要对我的头文件或类定义做一些事情。谢谢。

4

1 回答 1

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 类型的异常。

于 2013-05-19T17:16:34.180 回答