我正在尝试使用数据成员 std::vector 编写包装类。我的类的默认构造函数应该如何,以便我可以执行以下操作而不会出现超出范围错误:
Wrapper W;
W[0] = value; //overloaded index operator, forwards to the vector
默认构造函数无关紧要。您operator []
需要检查提供的索引是否超出范围并根据需要使向量更大。(我在这里假设“返回对 the 的引用vector<T>
”是一个错字,并且您想operator[]
在某个时候转发到向量)。
您必须在访问元素之前调整向量的大小:
// in the class definition
std::vector vec;
T &operator[](typename std::vector<T>::size_type idx)
{
if (idx >= vec.size()) {
vec.resize(idx + 1);
}
return vec[idx];
}
编辑:现在0
不是i
,这是一个巨大的错字。在这种情况下,您可以就地构造一个大小为 1 的向量:
std::vector<T> vec = std::vector<T>(1);
public:
T &operator[](typename std::vector<T>::size_type idx)
{
return vec[idx];
}