1

type の 2 つの配列がありRegion、どちらもサイズが 1000 で、ループの反復ごとに (メモリ アドレスをスワップして) 2 つをスワップしたいと考えています。私はこれがうまくいくことを望んでいました:

        Region *swap = (Region*)myRegions;
        myRegionsLast = myRegions;
        myRegions = (Region[1000])swap;

1行目は問題ないようです。明らかにそのタイプを再割り当てできないため、2行目と3行目は無効な割り当てです。type にキャストできないため、3 行目も無効です(Region [1000])。明らかに、できることなら、まったく新しい Region[1000] を割り当てたくありません。誰かが私がやりたいことを達成するのを手伝ってくれますか?

4

3 に答える 3

6

これは、配列全体を一度に割り当てることができないために発生します。ただし、ポインターを割り当てることができます。

Region reg1[1000], reg2[1000];
Region *myRegionsLast = reg1;
Region *myRegions = reg2;

これで、スワップ ルーチンは、さらに変更を加えなくても機能するようになります。

配列を一度に 1 要素ずつ交換することもできますが、それにはさらに多くのデータ コピーが必要になります。

于 2012-04-26T01:49:44.877 に答える
0

Region タイプのコンテンツの変数だけを作成し、それを反復処理するのはどうですか...

for(int i=0; i<1000; i++)
{
    tempRegionTypeVariable = myRegionsLast[i];
    myRegionsLast[i] = myRegions[i];
    myRegions[i] = tempRegionTypeVariable;
}

これが役立つことを願っています..ここで、「tempRegionTypeVariable」は単なる一時変数またはオブジェクトです。配列ではありません..

于 2012-04-26T01:50:12.633 に答える
0

A couple other valid answers were posted in the comments:

  1. Use std::swap() / std::array::swap
  2. Make them dynamically allocated arrays instead of static
于 2012-04-26T01:52:30.077 に答える