メモリの視点から見ると・・・・
使う予定のないデータをメモリ上に保存しておくのは、非常にもったいないことです。そこで、膨大な配列数を持つ配列を最低限の配列数にまとめ、使い回す方法を試してみました。使い回す方法① 要素のシフト
下図のように配列の要素をシフトさせて空いた場所に新たな要素を追加する方法。※上記はArray[8]を示し、数値が配列番号、英字が要素を示す。また、I、Jはそれぞれ新たな要素を示す。
コードで記載すると以下の様になります。
- double Array[8];
- bool newrecord; //更新の有無
- if(newrecord){ //更新があれば
- for(int i=0;i<7;i++) Array[7-i] =Array[6-i];
- }
問題点
この方法は、ループ処理がなされるため使い回す方法② ポイントのシフト
ポイント(代入先)のシフトをする方法を考えるために、脳内処理として配列の頭と最後をくっ付けてドーナッツ状にします。下図を参照(上記と同じ配列を使用) そして、一番古い要素のところに新しい要素を追加します。最後に、新しく代入した要素と一番古い要素との間を切り離せば脳内処理完了です。上記と同じ要素の並びが出来上がります。この方法を用いればループ処理を行わずに使い回しが可能になります。
コード表記すると以下のようになります。
- double Array[8];
- bool newrecord; //更新の有無
- int zeroindex=0; //仮想配列番号
- if(newrecord){ //更新があれば
- int index;
- zeroindex++;
- index=7-zeroindex%8
- Arraay[index]=newdate//新しい要素の代入
- }