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)
我也想过,如果我可以使用的东西swap和back(),但我不知道这是工作了.
有人可以告诉我一个正确的复制方法吗?感谢您的帮助!
如果你有你所说的,一个由整数组成的向量,而不是你所显示的(一个指向指向整数的向量的指针的向量的指针),那么该对象已经可以做到这一点。您只需使用它的复制构造函数或赋值运算符:
std::vector<std::vector<int> > vec;
std::vector<std::vector<int> > copy_of_vec = vec;
Run Code Online (Sandbox Code Playgroud)
是的,一旦你摆脱了所有的指针,事情就真的那么简单了。
由于您的实际存储类型是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)