大家好。我需要一些关于如何使用对象处理动态数组的经验。
我有一个类“SA”,由几个对象“Obj1”、“Obj2”等组成...
在类中,我有一个动态数组“SA_Array”,我按以下方式对其进行初始化,其中大小设置其长度:
double * SA_Array;
SA_Array = new double [size];
现在,我一直在尝试对上述对象使用“=”运算符,以便在每个对象中复制数组。不幸的是,我已经意识到它只会使指针相等,因此如果我修改一个对象中的数组,所有对象 SA_Array 都会被相同地修改......基本上只剩下数组上的一个拷贝。
例如Obj1.SA_Array == Obj2.SA_Array...
关于如何克服这个问题并实现 SA_Array 的对象特定拷贝,有什么好的建议吗?
最佳答案
如果大小是在运行时确定的,最容易使用的是 vector
vector<double> SA_Array(size);
现在您可以复制、交换和调整它的大小,它会相应地执行操作。如果您需要一个指向开始的指针,您可以使用 &SA_Array[0]
来实现。如果大小在编译时确定并固定,则可以使用 boost::array
boost::array<double, size> SA_Array;
您可以像使用数组一样使用它,但也可以复制它并像使用 vector 一样执行 SA_Array.begin()
之类的操作。如果您需要一个指向开始的指针,您可以使用 SA_Array.data()
或 &SA_Array[0]
来实现。
有一种方法也像你一样使用原始指针,然后手动复制它
double *SA_Array;
SA_Array = new double[size];
double *SA_Copy;
SA_Copy = new double[size];
std::copy(SA_Array, SA_Array + size, SA_Copy);
但这很麻烦,因为您需要记住 delete[]
它们,vector 将为您完成所有工作。
关于c++ - 均衡对象时复制数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/650283/