C#用いてSystem.Collectionクラスについて書いたページ(これ)がありますが、そのとき「STLにもスタックやキューがあったな」というのを思い出して、STLを使ってみることを思いつきました。 実はSTLを使うのは初めてです。 そのため、浅はかな知識で書いていることをご了承ください。
.NET Frameworkにおいて、スタックやキューはクラス化されたものがSystem.Collection名前空間に存在しますが、STLにもスタック (stack)やキュー(queue)といったものが用意されているので、それを使ってみることにします。 STLについては何も知らないので、ここでは STLが何であるかという説明はおいておきます。
stack
STLのstackは.NET FrameworkのStackとは異なり、Popしてもアイテムは返されません。 Popは最後に追加したアイテムを取り出して破棄します。 このとき Popする前にtop()関数を用いてアイテムを参照することはできます。 Pushの動作は変わりありません。 次のコードはSTLのstackを int型で用いた例です。 スタックの動作についてはこちらを参考にしてください
queue
.NET FrameworkのQueueはEnqueue()とDequeue()でアイテムを入れたり出したりしていたのですが、STLのqueueでは stackのようにpop()とpush()を使います。 また、.NET Frameworkと異なり、front()とback()により先頭と末尾の両方のアイテムを参照することができます。 Countプロパティに相当するものに、サイズを取得するためのsize()も存在します(stackにも存在します)。 次のコードはSTLのqueueをint型で用いた例です。 キューの動作についてはこちらを参考にしてください、
deque
STLにはstackやqueueのほかにもさまざまなテンプレートクラスが存在します。 そのうちのdequeは.NET Frameworkには相当するものがないもので、一見するとqueueと似たような性質のものなのですが、queueと異なり先頭と末尾の両方から PushとPopが行えるようになっています。 ちなみにdequeとはDouble Ended Queueのことで、デクまたはディキューと読みます。 次のコードはSTLのdequeをint型で用いた例です。
vector
vectorは.NET FrameworkでいうArrayListに相当するものと考えられます。 表向きは配列のように振舞いますが、配列とは異なりArrayList同様にそのサイズは可変です。
僕ははじめvectorという名前をみて「ベクトルでも扱うのかな」と思ったのですが、そうではありませんでした。 名前からは数学のベクトルは想像しないほうがいいです。
EnumerateVectorではイテレータ(反復子)と呼ばれるものを用いてすべてのアイテムを列挙しています。 イテレータの振る舞いは一見ポインタのように見えます。 また、アイテムの追加と削除にもイテレータを用いています。 イテレータは.NET FrameworkのIEnumeratorに相当するものであると言っていいかもしれません。 ただ、このイテレータの使い方に加え、テンプレート関数の使い方が正しい使い方なのかいまいち自信がありません。 STLに関しては今回初めて使ったのでまだまだ勉強不足なのでこの辺で一区切りしておきます。 もし、おかしい部分などあればぜひご指摘ください。