私はConcert Technologyを介してCPLEXとC++を使用していますが、遭遇する再発問題は内部でIloArray
構造がオーバーロードされているようですvector
構造参照によってコピーされる演算子を使用します。これはアレイ構造を扱うのに非常にきれいでメモリ効率のよい方法です。CPLEX IloArray、簡単な方法で値をコピーする方法
しかし...これは、以前に宣言してIloIntArray Array
を初期化するために、IloIntArray Array_copy = Array
を作ることArray_copy
にArray
の参照コピーを作成することを意味します。したがって、Array
の変更は自動的にArray_copy
に転送されます。同じことが、add()
ルーチンを介して多次元IloArray
構造に適用されます。
私たちは、私がi = 1
iSize
からArray2D[i]
の各位置での保管iSize
にi = 1
にインデックスを付け、ループのために、Array
の値がどのなります内側に、2D IloArray<IloIntArray> Array2D(env)
を移入する必要があること、例えば、言ってみましょうループの反復ごとに異なる。いずれかを作る:
Array2D[i].add(Array)
または、Array2D[i] = Array
、Array2D
のi次元が最初にサイズiSize
のように設定されたと仮定。
i-dimensionの要素を参照するたびに、すべての要素が最後になり、 の値。今
、ほかに、私自身のコピーバイ値演算子を作るコンストラクタ(オプションI)またはコピールーチン(オプションII)受信、両方、出発地と目的地(、例えば、多次元配列)の位置と、元の配列がコピーされる場所との間の距離を計算する。
別の方法でコピーを作成する方法はありますか?いずれにしても、これらのオプションのどれがよりきちんとしているか、メモリ効率が良いかを決める手助けができますか?直感的に私は私がより効率的にするオプションを考えるが、私はそれを行う方法がわからない...
感謝を事前にあなたの助け Y
AFAIKでは、配列をコピーする方法を以下に示します。1) 'for'ループ。 2) 'memcpy' 3)DMA 4)アンロールされた(スロットごとに1つの割り当て)。アセンブリ言語を使用する場合は、大きなメモリブロックをコピーするための命令があります。 –
ところで、ポインタと参照の1つの使用は、配列をコピーする(関数に渡すなど)実行コストを避けることです。ポインタや参照を渡すと、大きな配列よりも実行時間と実行時間が短縮されます。 –
私は、ポインタと参照の利用がよりきれいでメモリ効率の良い方法につながると述べました。しかし、それは私がやろうとしていることをやめさせている – Jacko