2

我想在复制构造函数中复制一个 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()我不确定这是否可行。

有人可以告诉我制作副本的正确方法吗?提前感谢您的帮助!

4

2 回答 2

8

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

class T
{
public:
   T() {};

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

private:
   std::vector<std::vector<int>> v_;
};
于 2013-04-22T19:26:09.893 回答
5

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

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

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

于 2013-04-22T19:26:13.233 回答