0

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

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

2 回答 2

1

默认构造函数无关紧要。您operator []需要检查提供的索引是否超出范围并根据需要使向量更大。(我在这里假设“返回对 the 的引用vector<T>”是一个错字,并且您想operator[]在某个时候转发到向量)。

于 2013-08-29T16:25:45.033 回答
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];
}
于 2013-08-29T16:26:05.103 回答