最適化セミナーのご案内

6.4 Cの配列への書き出し

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

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(UNIX版ではuseClass.cc)ではインデックスを見ないで戻りの配列に値を設定しています.なお,inddataに対応する領域はdump内部で確保されるためコールした側で解放する必要があります.スカラー値(添字のないオブジェクト)は長さ1のオブジェクト(添字の値としてはヌル文字列が設定されます)として同様にdumpで取得することができますが,便利な手続きとしてdoubleを返すasDouble()という手続きがあり,

double objval = obj.val.asDouble();

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


 

 

上に戻る