矢量<point> myArr </point>的深层副本

时间:2010-10-09 07:21:33

标签: c++ vector member deep-copy libstdc++

为了制作myArr的深层副本,

vector <Point> myArr;

其中Point是一个有2个整数的类,

我需要做一些特别的事吗? <或者

vector <Point> otherArr = myArr;

我需要删除otherArr中的一些点,但同时我需要myArr中的所有点以供日后使用。

提前致谢

3 个答案:

答案 0 :(得分:7)

请参阅Shallow vs Deep CopiesEffective C++

Point不需要深层复制。作为一个拇指规则,当一个类有指针成员时,需要“深层复制”。 Point类只有两个int成员,因此“深度复制”不需要任何特殊工作,正常或“浅拷贝”会完全正常。实际上,为Point编写复制构造函数并不是 required ,编译器提供的默认或复合构造函数就可以了。

关于你的第二个问题,在

行之后
vector< Point > otherArr = myArr;

已执行,otherArrmyArr是两个独立向量。在其中一个上执行的操作(例如删除一些元素)不会以任何方式影响另一个。

答案 1 :(得分:1)

任务应该没问题。它确保所有数据都被正确复制。只需确保Point是可复制的。

答案 2 :(得分:1)

你有什么好。该向量具有重载的赋值运算符和执行深层复制的复制构造函数。