跳至主内容
框架 无框架

数组
NEXT
环境中的数组
可扩展数组
数组作为句柄
数组索引
复制数组
编程提示:高效使用数组

对于 Concert Technology 中的大多数基本类(如 "IloIntVar或 "IloConstraint),也有一个相应的数组类,数组中的元素就是该基本类的实例。 例如,"IloConstraintArray实例的元素就是 "IloConstraint类的实例。

环境中的数组

每个数组都必须属于一个环境("IloEnv的实例)。 换句话说,当您创建 Concert Technology 数组时,会将 "IloEnv实例作为参数传递给构造函数。 给定数组中的所有元素必须属于同一环境。

可扩展数组

Concert 技术阵列具有可扩展性。 也就是说,你可以动态地向数组添加元素。 您可以通过数组类的成员函数 "add来添加元素。

您还可以通过数组的 "remove成员函数从数组中删除元素。

每当数组中添加或删除一个元素时,对该元素的引用就会发生变化。 例如

IloNumArrayx;

IloNum *x1ptr= &(x[1]);
x.add(1.3);
**x1ptr不再有效!
数组作为句柄

与其他 Concert Technology 对象一样,数组通过两个类来实现:一个句柄类对应一个实现类。 句柄类对象包含一个数据成员(句柄指针),指向相应实现类的一个对象(实现对象)。 作为 Concert Technology 的用户,您将主要使用手柄。

数组索引

CPLEX 遵循 C++ 编程惯例,从 0(零)开始枚举数组的索引。 例如,添加到模型中的 MIP 起点指数从 0(零)开始。 同样,与模型相关的过滤器的索引也从 0(零)开始。

复制数组

许多句柄可能指向同一个执行对象。 这一原则适用于数组以及 Concert Technology 中的其他句柄类。 如果要为同一个实现对象创建多个句柄,应使用数组类的复制构造函数或赋值操作符。 例如

  
              IloNumArrayarray(env); // 创建指向新植入的句柄  
              IloNumArray array1(array); // 创建指向同一 impl 的句柄  
              IloNumArray array2;// 创建一个空句柄  
              array2= array; // 将句柄array2的 impl 设置为 array 的 impl

再举一个例子,下面几行将 "a1中的所有元素添加到 "a2中,实质上是复制数组。

IloNumArray a1;
IloNumArray a2;

a2.clear();
a2.add(a1);
编程提示:高效使用数组

如果您的应用程序只读取数组(也就是说,如果您的函数不修改数组中的元素),那么我们建议您将数组作为 "const参数传递给函数。 这种做法迫使 Concert Technology 访问索引操作符的 "const转换(即 "operator[]),这样速度更快。

NEXT