如何按值(而不是按引用)复制 CPLEX IloArray,这是一个简单的方法
How to copy-by-value (not by reference) a CPLEX IloArray, the easy way
我使用 CPLEX 并通过音乐会技术进行C++,我遇到的一个反复出现的问题是,在内部,IloArray
结构似乎vector
具有按引用复制运算符的结构重载。我必须承认,这是一种非常整洁且内存高效的处理数组结构的方法。
还。。。这意味着为先前声明和初始化的IloIntArray Array
制作IloIntArray Array_copy = Array
,将使Array
的引用副本成为Array_copy
。因此,Array
的任何更改都会自动传输到 Array_copy
.这同样适用于通过add()
例程的多维IloArray
结构。
例如,假设我需要填充一个 2D IloArray<IloIntArray> Array2D(env)
,在一个以 i = 1
到 iSize
索引的 for 循环中,存储在Array2D[i]
的每个位置,从 i = 1
到 iSize
,Array
的值在循环的每次迭代中都会有所不同。制作:
-
Array2D[i].add(Array)
或, -
Array2D[i] = Array
,假设Array2D
i 维最初被设置为大小iSize
。
无法进行预期的按值复制,因为每次都会对 i 维的元素进行按引用复制,并且您最终得到所有相同的元素,等于 Array
的最后一个值。
现在,此外,制作我自己的按值复制运算符构造函数(选项 I)或复制例程(选项 II)接收源数组和目标数组以及要复制源数组的目标数组(例如多维数组)的位置。
有没有另一种方法可以按值复制?无论如何,您能帮我决定这些选项中哪一个更整洁和/或更节省内存吗?直觉上我认为选项 I 更有效率,但我不知道该怎么做......
提前感谢您的帮助Y
到目前为止,我正在通过实现 copy() 函数来解决我自己的问题。
我已经对我的多维数组进行了类型定义,如下所示:
三维或四维整数或数字数组的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();
}
欢迎您提出意见和/或更好的答案!!
- C++从另一个类访问公共静态向量的正确方法是什么
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在类定义之后定义一个私有方法
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何制作一个将函数作为参数的类方法
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- 在另一个类视图中添加最多2个图表的正确方法是什么
- 检查哪个对象调用了另一个对象的对象方法
- 不能将方法返回的值用于另一个方法
- 在 c++ 中,有一种方法可以创建一个包含地图作为值的树状地图?
- std::find,返回所有找到的值的替代方法,而不仅仅是存在重复的向量的第一个值
- Qt将信号与另一个类方法连接
- C++ STD 函数运算符:有没有一种方法可以通过函数将一个向量映射到另一个向量上?
- C++有没有办法强制重写一组方法,如果其中一个方法在子类中具有重写?
- 一个模板方法,用于同时接受常量和非常量参数
- 对具有相同方法的不同类使用一个变量
- 将一个类的方法指针存储到另一个类中
- 从另一个标头中的标头调用静态方法
- 无法"this"指针传递到另一个类并在 CPP 中调用该类的任何方法
- 模板中的方法:一个有效,一个不实例化