一开始我想的一件简单事情似乎比我想象的要难。我想在复制构造函数中复制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));
}
}
}
我还想过如果我可以使用swap
和back()
的内容,但我不确定这是否有效。
有人可以告诉我一个正确的复制方法吗?感谢您的帮助!
答案 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;
是的,一旦你摆脱了所有的指针,它真的很简单。