1

大家好。我需要一些经验来了解如何使用对象处理动态数组。

我有一个类'SA',由几个对象'Obj1','Obj2'等组成......

在类中,我有一个动态数组“SA_Array”,我以以下方式对其进行初始化,其中大小设置其长度:

double * SA_Array;
SA_Array = new double [size];

现在我一直在尝试对上述对象使用“=”运算符来复制每个对象中的数组。不幸的是,我意识到它只会使指针相等,因此如果我在一个对象中修改数组,所有对象 SA_Array 的修改都是相同的......基本上只剩下数组上的一个副本。

例如 Obj1.SA_Array == Obj2.SA_Array...

关于如何克服这个问题并实现 SA_Array 的对象特定副本,有什么好的建议吗?

4

2 回答 2

3

如果大小是在运行时确定的,最容易使用的一个是向量

vector<double> SA_Array(size);

现在您可以复制、交换、调整它的大小,它会相应地采取行动。如果您需要一个指向开头的指针,您可以使用&SA_Array[0]. 如果大小在编译时确定并固定,则可以使用 boost::array

boost::array<double, size> SA_Array;

您可以像使用数组一样使用它,但也可以复制它并执行类似SA_Array.begin()向量的操作。如果您需要一个指向开头的指针,您可以使用SA_Array.data()or来完成&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[]它们,向量将为您完成所有工作。

于 2009-03-16T12:50:23.153 回答
0

std::vector<double>要么使用标准库集合,如

于 2009-03-16T12:51:10.157 回答