围绕std :: vector的包装器的构造函数

时间:2013-08-29 16:22:42

标签: c++ stdvector

我正在尝试使用数据成员std :: vector编写包装类。我的类的默认构造函数应该如何显示,以便我可以执行以下操作而不会超出范围错误:

Wrapper W;
W[0] = value;  //overloaded index operator, forwards to the vector

2 个答案:

答案 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];
}