向大家致以问候。我需要一些实验来解决如何使用Objects处理动态数组。
我有一个'SA'类,由几个对象'Obj1','Obj2'等组成......
在类中我有一个动态数组'SA_Array',我按照以下方式初始化,其中size设置其长度:
double * SA_Array;
SA_Array = new double [size];
现在我一直在尝试在上面的对象上使用'='运算符来复制每个对象中的数组。不幸的是,我意识到它只是均衡了指针,因此如果我在一个对象中修改数组,所有对象SA_Array的修改都是相同的...基本上只留下我在数组上的一个副本。
e.g。 Obj1.SA_Array == Obj2.SA_Array ......
关于如何克服这个问题并获得SA_Array的特定对象副本,是否有任何好的建议?
答案 0 :(得分:3)
如果在运行时确定大小,最容易使用的是向量
vector<double> SA_Array(size);
现在你可以复制,交换,调整它,它会相应地采取行动。如果需要指向begin的指针,可以使用&SA_Array[0]
执行此操作。如果在编译时确定并修复了大小,则可以使用boost :: array
boost::array<double, size> SA_Array;
您可以像使用数组一样使用它,但也可以复制它并像向量一样执行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[]
,它们会为你做一切。
答案 1 :(得分:0)
使用标准库集合,例如std::vector<double>
,或者在极少数情况下需要使用原始数组,您可以编写复制构造函数,注意确保异常安全。