2009-03-03 9 views
5

下限/上限で動作する二重リンクリスト(ただし配列あり)と同様のものを作成したいと思います。C++ - 下限/上限の循環配列ですか?

典型的な円形配列は、おそらく次のようになります。

next = (current + 1) % count; 
previous = (current - 1) % count; 

しかし、これに適切に下/上限を組み込むための数学的な計算は何ですか?

  • 0(下限項目1)
  • 2(上限項目1)
  • 3(下限項目2)
  • 4(上限項目2)

だから:

- アイテムのインデックス2に>次の1つの戻り0

- アイテムのインデックス4の>次の2つのリターン3

- - 1を返す2

項目のインデックス0の>は、前の項目のインデックス3上>前の2つの戻り

4ありがとうございました!

注:外部ライブラリは使用できません。

+0

あなたの説明を少し広げることができますか?循環キューの循環キューが必要なようです。この場合、各キューは別々のアレイで優れています。 – sfossen

答えて

6

next === current + 1 (mod count) 
prev === current - 1 (mod count) 

ここで===は '合同'演算子です。剰余演算子にこれを変換する、それは次のようになります。

count = upper - lower 
next = ((current + 1 - (lower%count) + count) % count) + lower 
prev = ((current - 1 - (lower%count) + count) % count) + lower 

それは、各項目の上位&下限を見つけるためにあなた次第でしょう。あなたは高速な検索のために、これをバイナリツリーに格納することができます。たぶん私はあなたの質問を理解していないでしょう。だから、

1

ブーストにはCircular containerという制限があります。

実際、このページの例は、ここであなたが言っているものと非常によく似ています。

しかし、いずれにせよ、あなたは係数を使用して簡単にそれの数学の部分を達成することができます:

だからあなたの最大は3だったと言う:一般的な数学的に

int MAX = 3; 
someArray[ 0 % MAX ]; // This would return element 0 
someArray[ 1 % MAX ]; // This would return element 1 
someArray[ 3 % MAX ]; // This would return element 0 
someArray[ 4 % MAX ]; // This would return element 1 
5
  +=======+  +=======+  +=======+ 
      | Obj | ---> | Obj | ---> | Obj | 
buffer | 1 | <--- | 2 | <--- | 3 | 
      +=======+  +=======+  +=======+ 

index  0     1    2  /* our first run */ 

index  3     4    5  /* second run */ 

and so on ... 

(0>これは下<の上部と下部を前提としています)、あなたは3メンバーリストを参照、第1項目は、など0, 3, 6,でインデックス化され

同様に、2番目の項目は1, 4 (1 + 3), 7 (4 + 3), ...

一般的なルールでインデックス化されている。

curr |  next 
-------+----------------- 
    0 | (0 + 1) % 3 = 1 
-------+----------------- 
    1 | (1 + 1) % 3 = 2 
-------+----------------- 
    2 | (2 + 1) % 3 = 0 
-------+----------------- 

希望私はこの記事を書いた

3

を支援します。我々が得るこの式を使用してnext <- (next + 1) % sizesize = upper - lower + 1

円形のSTLイテレータについては数年前のことです。

http://noveltheory.com/Iterators/Iterator_N0.htm

それは(ベクトル&ブースト:配列など)任意のSTLコレクション上で動作します

関連する問題