我有一些我无法编辑的主文件。有一些事情要做,我正在编写适合主文件的类。 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行的异常?我不允许编辑该主代码。我需要对头文件或类定义做一些事情。感谢。
答案 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类型的异常将是 无效访问时抛出。