2013-04-22 73 views
1

一個簡單的事情,起初我認爲似乎比我想的要困難。我想在一個拷貝構造函數中拷貝一個int類型的向量向量。在複製構造函數中複製矢量向量

std::vector<std::vector<int> * > * bar; 

我試過,但它不工作:

Foo(const Foo& rhs) 
: bar(new std::vector<std::vector<int> * >(rhs.vec->size())) { 

    for (std::size_t i = 0; i < rhs.bar->size(); i++) { 
     bar->push_back(new std::vector<int>()); 
     for (size_t j = 0; j < (*rhs.bar)[i]->size(); j++) { 
      bar->back()->push_back((*rhs.bar)[i]->at(j)); 
     } 
    } 
} 

我也想過,如果我可以使用的東西與swapback()但我不知道這是工作了。

有人能告訴我一個正確的方法來複制?感謝您的幫助!

+2

如果你確實有一個「向量類型爲int的向量」,你不需要在拷貝構造函數中做任何特殊的事情。你爲什麼使用所有這些指針? – Chad 2013-04-22 19:23:12

+0

std :: vector *> * bar中的指針是否真的有必要? – lucasmrod 2013-04-22 19:23:51

+1

這是可怕的代碼。除非你的意思是「乘法」,否則不要在C++中說'*'。 – 2013-04-22 19:24:00

回答

6

由於您的實際存儲類型是int,在這種情況下,我可以認爲沒有理由使用任何指針。改變你的成員變量不使用指針,只需讓vector對象的拷貝構造函數爲你做好工作。

class T 
{ 
public: 
    T() {}; 

    // For this class, the copy constructor isn't even necessary! 

private: 
    std::vector<std::vector<int>> v_; 
}; 
+0

是的,我知道,使用沒有指針使複製構造函數(和賦值運算符)是多餘的。我想我遇到了上面的存儲問題。感謝喚醒拍手! – 2013-04-22 19:32:59

2

如果您有什麼你,整數的向量的向量,而不是你顯示(指針的指針到向量整數向量),則該對象可以做到這一點已經。你只需要使用它的拷貝構造函數或賦值操作符:

std::vector<std::vector<int> > vec; 
std::vector<std::vector<int> > copy_of_vec = vec; 

是的,就是這麼簡單,一旦你擺脫所有的指針。