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

And*_*ach 1 c++ copy copy-constructor stdvector

我最初想的一件简单的事情似乎比我想象的要难.我想在复制构造函数中复制int类型的向量向量.

std::vector<std::vector<int> * > * bar;
Run Code Online (Sandbox Code Playgroud)

我试过这个,但它不起作用:

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));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我也想过,如果我可以使用的东西swapback(),但我不知道这是工作了.

有人可以告诉我一个正确的复制方法吗?感谢您的帮助!

jal*_*alf 7

如果你有你所说的,一个由整数组成的向量,而不是你所显示的(一个指向指向整数的向量的指针的向量的指针),那么该对象已经可以做到这一点。您只需使用它的复制构造函数或赋值运算符:

std::vector<std::vector<int> > vec;
std::vector<std::vector<int> > copy_of_vec = vec;
Run Code Online (Sandbox Code Playgroud)

是的,一旦你摆脱了所有的指针,事情就真的那么简单了。


Cha*_*had 6

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

class T
{
public:
   T() {};

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

private:
   std::vector<std::vector<int>> v_;
};
Run Code Online (Sandbox Code Playgroud)