复制矢量矢量在复制构造函数中

时间:2013-04-22 19:21:37

标签: c++ copy copy-constructor stdvector

一开始我想的一件简单事情似乎比我想象的要难。我想在复制构造函数中复制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 个答案:

答案 0 :(得分:6)

由于您的实际存储类型为int,因此在这种情况下,我认为没有充分理由使用任何指针。将您的成员变量更改为不使用指针,只需让vector对象的复制构造函数为您完成工作。

class T
{
public:
   T() {};

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

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

答案 1 :(得分:2)

如果你有所说的,是一个向量的向量的向量,而不是你显示的向量(指向向量的向量指针向量的指针),然后对象就可以做到了。您只需使用其复制构造函数或赋值运算符:

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

是的,一旦你摆脱了所有的指针,它真的很简单。