我正在尝试使用数据成员std :: vector编写包装类。我的类的默认构造函数应该如何显示,以便我可以执行以下操作而不会超出范围错误:
Wrapper W;
W[0] = value; //overloaded index operator, forwards to the vector
答案 0 :(得分:1)
默认构造函数无关紧要。您的operator []
需要检查提供的索引是否超出范围,并根据需要使向量更大。 (我在这里假设“返回对vector<T>
的引用”是一个错字,你想在某个时候转发到向量的operator[]
。
答案 1 :(得分:1)
您必须在访问元素之前调整向量的大小:
// 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];
}