如何按值(而不是通过引用)复制 CPLEX IloArray,这是一种简单的方法

How to copy-by-value (not by reference) a CPLEX IloArray, the easy way

我通过 Concert Technology 使用 CPLEX 和 C++,我遇到的一个反复出现的问题是 IloArray 结构在内部似乎被重载 vector 结构与按引用复制运算符。我必须承认这是处理数组结构的一种非常简洁且内存效率高的方法。

然而...这意味着对于先前声明和初始化的 IloIntArray Array,制作 IloIntArray Array_copy = Array 会将 Array 的参考副本制作成 Array_copy。因此,Array 中的任何更改都会自动传输到 Array_copy。这同样适用于通过 add() 例程的多维 IloArray 结构。

例如,假设我需要在 i = 1iSize 索引的 for 循环中填充一个 2D IloArray<IloIntArray> Array2D(env),存储在 IloArray<IloIntArray> Array2D(env) 的每个位置=23=],从 i = 1iSizeArray 的值在循环的每次迭代中都会不同。制作:

  1. Array2D[i].add(Array) 或者,
  2. Array2D[i] = Array,假设 Array2D i 维度最初设置为大小 iSize

无法进行预期的按值复制,因为每次都会对 i 维的元素进行按引用复制,最终得到所有相同的元素,等于最后一个值Array.

现在,此外,制作我自己的 按值复制运算符 构造函数(选项 I) 或 copy routine (Option II) 接收源数组和目标数组以及要复制原始数组的目标数组(例如多维数组)的位置。

是否有另一种方法来制作按值复制?无论如何,你能帮我决定这些选项中的哪一个更整洁 and/or 内存效率吗?直觉上我认为 选项 I 更有效,但我不知道该怎么做...

在此先感谢您的帮助 Y

到目前为止,我正在通过实现 copy() 函数来解决我自己的问题。

我有 typedefed 我的多维数组如下:

typedef IloArray<IloIntArray> Ilo2IntArray;typedef IloArray<IloNumArray> Ilo2NumArray 等等,用于三维或四维整数或数值数组。

我的 Ilo3IntArray copy(Ilo3IntArray origin) 复制函数重载的示例如下:

Ilo3IntArray copy(Ilo3IntArray origin) {

IloInt iSize = origin.getSize();
Ilo3IntArray destination(env, iSize);
IloInt jSize = origin[0].getSize();
IloInt zSize = origin[0][0].getSize();

for (IloInt i = 0; i < iSize; i++) {
    destination[i] = Ilo2IntArray(env, jSize);

    for (IloInt j = 0; j < jSize; j++) {
        destination[i][j] = IloIntArray(env, zSize);

        for (IloInt z = 0; z < zSize; z++) {
            destination[i][j][z] = origin[i][j][z];
        }
    }
}

return destination;

// Freeing Local Memory
destination.end();
}

您的意见and/or欢迎更好的回答!!!