C++ポインタ天国

配列のインデックスに負の値を使うのはご法度です(某F○rtranは可能らしいが)。でも、負のインデックスを使った方が便利な場合もよくあります。どうにかできないでしょうか?std::map< int, int >という荒業もあるが、もっと普通に出来る方法があります。
まずはC++のポインタと配列の復習から(ぉ

array[ n ];
*( array + n );

上の二つは全く同じ働きをします。わからない人は適当なC++の文法書か「ねこでもわかる・・・・」でも見てください。こいつを利用して配列の位置をずらすのです。例えば、-3〜3のインデックスの配列が欲しい場合は以下のようにすればよいのです。

//まずは必要な大きさの配列を用意する。
int array0[7];
//で、こいつをずらしたポインタを用意する。
int* array = array0 + 3;
//これで完成。
array[-3] = 9;
array[-2] = 4;
array[-1] = 1;
array[0] = 0;
array[1] = 1;
array[2] = 4;
array[3] = 9;
//↑このように使えます。

まあ、生ポインタを直接いじっているので使い方には要注意ですけど。