「循環」インデックスを実際のインデックスに変換するための(C ++での)最も簡潔で効率的な関数は何ですか?
私の問題は次の画像で説明できます:
size
要素を含むサイズの実際のリスト(たとえば、C ++ベクトル)があります(ここA, B, C, D, E
)。-inf
「循環」リストを模倣するために、入力インデックス(から+inf
)をリストの実際のインデックスに変換する関数を探しています。この関数と画像の例を使用すると、コードは次のようになります。
for(i=-10; i < 10; ++i) std::cout<<list[myFunction(i, list.size())]<<" ";
画像に表示されているリストの4倍を印刷します。
私の現在の表現myFunction
は:
inline int myFunction(const int i, const int size)
{
return (i >= 0) ? (i%size) : ((size-((-i)%size))%size);
}
これを書くためのより単純/簡潔/効率的な方法があると思いますか?