2013-08-29 96 views
0

我试图用数据成员std :: vector编写包装类。我的类的默认构造函数应该怎么看起来像这样我可以不用走出误差范围如下:构造函数包装std :: vector

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

也许构造应该什么都不做,而是'运营商[]'应该检查的大小和'调整()'的载体确保'我'是在范围内(当心无效以前的引用)?否则,完全猜测这个向量应该是多大,所以没有人能真正说出你的默认构造函数应该是什么样子。 – Cornstalks

+0

对不起,我的意思是W [0]而不是W [i]。 – user2696565

+0

如果你想要的只是'W [0]',那么构造函数可能是'Wrapper():m_vector(1){}' – Cornstalks

回答

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

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

相关问题