2012-04-26 6 views
1

私はサイズが両方ともRegionの2つの配列を持っています。ループの繰り返しごとに、その2つをスワップします(メモリアドレスを交換します)。私はこれがうまくいくことを期待していました:3つ目の配列を完全に割り付けずに2つの配列をスワップします

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

1つはうまく見えます。 2行目と3行目は無効な割り当てです。そのタイプを再割り当てすることはできません。また、タイプ(Region [1000])にキャストできないため、3行目も無効です。明らかに私はそれを助けることができるならば、全く新しいRegion [1000]を割り当てたくない。誰かが私が欲しいものを達成するのを助けることができますか?

+1

第3の配列を割り当てる必要はありませんが、インデックスでインデックスを作成するので、ただ1つの一時領域変数を使用することができます。 – Jeremy

+1

ポインタと配列の代わりに両方のポインタを使用するのはなぜですか? – slartibartfast

+1

@Jeremy、または 'std :: swap()'を使用してください。 – Wyzard

答えて

6

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

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

スワップルーチンは、これ以上修正することなく動作します。

一度に1つの要素を交換することもできますが、より多くのデータをコピーする必要があります。

0

どのように地域のタイプのコンテンツのちょうど変数を作成し、それを反復処理について...

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

・ホープ、このことができます。.. ここで「tempRegionTypeVariable」だけの一時的な変数またはオブジェクトです。 ..

+0

私はただし、すべての変数をスワップする代わりにアドレスを切り替えてください。速度はこのアプリケーションにとって非常に重要です。 – eds

+0

これは良い考えですが、WyzardとDasblinkenlightが指摘しているように、はるかに速い方法があります。 – thb

+0

うん..スピードが重要な要素なら、私の方法は最良ではありません。それは最もシンプルで簡単ですが.. :) – LearningDeveloper

0

カップル他の有効な回答はコメントで投稿した配列でない:

  1. 使用のstd ::スワップ()/ STD ::配列::スワップ
  2. ではなく、それらを動的に割り当てられた配列を作ります静的
関連する問題