我試圖用數據成員std :: vector編寫包裝類。我的類的默認構造函數應該怎麼看起來像這樣我可以不用走出誤差範圍如下:構造函數包裝std :: vector
Wrapper W;
W[0] = value; //overloaded index operator, forwards to the vector
我試圖用數據成員std :: vector編寫包裝類。我的類的默認構造函數應該怎麼看起來像這樣我可以不用走出誤差範圍如下:構造函數包裝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[]
)。
也許構造應該什麼都不做,而是'運營商[]'應該檢查的大小和'調整()'的載體確保'我'是在範圍內(當心無效以前的引用)?否則,完全猜測這個向量應該是多大,所以沒有人能真正說出你的默認構造函數應該是什麼樣子。 – Cornstalks
對不起,我的意思是W [0]而不是W [i]。 – user2696565
如果你想要的只是'W [0]',那麼構造函數可能是'Wrapper():m_vector(1){}' – Cornstalks