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

Constructor for wrapper around std::vector

本文关键字:构造函数 包装 vector std      更新时间:2023-10-16

我正试图用数据成员std::vector编写一个包装类。我的类的默认构造函数应该是什么样子的,这样我就可以在不出现超出范围错误的情况下完成以下操作:

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

在访问元素之前,必须调整向量的大小:

// 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];
}

默认构造函数是不相关的。您的operator []需要检查所提供的索引是否超出范围,并根据需要增大矢量。(我在这里假设"返回对vector<T>的引用"是一个拼写错误,并且您希望在某个时刻转发到向量的operator[])。