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