数理最適化セミナーのご案内

6.5 Cの配列への書き出し

 操作する手続きが次に行うのは,求解した結果をC++の配列の形で取得することです.システムオブジェクトに対してdump()という手続きを起動します.loadmoduleプロジェクトのdriver.cppでは

int len;
char** ind;
double* knapx;
knap.x.val.dump(len, ind, knapx);

と行うことによって,C++の配列knapxに解を書き出しています.一般にdumpの引数は

dump(int len, char*& ind, double* data);

で,

len: inddataの総長さ
ind: インデックス文字列の配列(長さlen
data: データ本体(長さlen

 

です.data[0], data[1], ...には添字ind[0], ind[1], ...がそれぞれ対応しています.データの並び順はインデックスをソートした際の自然な順番(数字の場合には昇順,文字列の場合には辞書順)となり,この場合,入力データはreadDによって設定されているので,データ並びに対応するknapxには番号順に値が設定されることが保証されます.そのため,driver.cppではインデックスを見ないで戻りの配列に値を設定しています.なお,inddataに対応する領域はdump内部で確保されるためコールした側で解放する必要があります.スカラー値(添字のないオブジェクト)は長さ1のオブジェクト(添字の値としてはヌル文字列が設定されます)として同様にdumpで取得することができますが,便利な手続きとしてdoubleを返すasDouble()という手続きがあり,

double objval = obj.val.asDouble();

のように値を取ることができます.


 

 

上に戻る