長文につき,本文で返信w

kiku_tさん『MC++Dですが, ぼくこれC++の勉強をするために一番はじめに買った本です. Java でもちょっとつかってたデザインパターンという概念に興味があったものでほかの初学的な内容の本には目もくれずこの本を買ったのですが... なんか視点の高さが違いすぎたっす..』

あれを一番最初に買ったんですかっ!?それはさすがにオススメできないですよ.あの本の内容がすごいのは確かなんですが,一方で実用として使うにはあまりにハードルが高いです.どちらかというとライブラリ提供者のための本です.C++を真面目にやろうとするなら『プログラミング言語C++ 第3版』(asin:475611895X.良く「一番最初に読むべきC++の本」って言われます),『Effective C++』(asin:4756118089.良く「2番目に読むべきC++の本」って言われますw),『More Effective C++』(asin:4756118534.良く「3番目に読むべきC++の本」って言われますw)あたりは押さえていて絶対に損はないかと.

kiku_tさん『STLってJavaでいう J2SE みたいなもんかと思ったらかなり違うんですよね. Java ではこれがないとはじまらないようなところもあるのにC++デザインパターンを勉強しようとしてるひとでSTLってなにか知らないようなひともいましたよ。』

ライブラリって所詮「あれば便利なもの」ですからね.あれ使わなくてももちろんプログラムは書けると思うのですが,いわゆる『車輪の再発明』をしがちになって実装に無駄な時間をかけてしまう.それを避けるためのライブラリであり,標準化なんですよね.
私も前は良く自分で一から組んでワ━━ヽ(・∀・)ノ━━イとかやってたんですが,結局それは時間の無駄なんですよね(言語の習得・習熟の観点からは十分に意味のあることだとは思いますが).また,自分で組んで学ぶものより他人が組んだものから得られるものの方が大きいことが多い(ライブラリの実装者はまず間違いなくその分野では自分より豊富な実装経験と技術を持った方ですからね)と考えるようになって,自分の手を止めて他人のライブラリの設計思想や実装技術を学ぶ姿勢を重視するようになりました.
というわけで,C++をやる上でSTLを知らないというのは,第一に「時間の無駄を生じやすい」,第二に「STL(の設計や実装)を知ることで学べることの多くを見過ごしてしまう」,以上の2点で非常に大きな損失だと私は思います.
全然話は変わってデザパタ(asin:4797311126)の観点からSTLを見てみます.多くの人にとってSTLの主役はコンテナでしょう.そしてvectorは便利でかつ効率の良い動的配列だ,ぐらいのイメージが大半だと思います.コンテナの利便性・安全性はclassによるカプセル化,効率はtemplateによる静的多相性によるところが大きいと思いますが,この点でも十分にC++の恩恵を享受していることは確かです.
しかし,STLの真価はまずコンテナの走査をiteratorによって抽象化したことであり,これはデザパタの言葉ではiteratorパターンの適用になるでしょう.一方でそのiteratorを通してアルゴリズムがコンテナに操作を加えるわけですが,その際にアルゴリズムの動作をクライアントが関数オブジェクトを通してカスタマイズ可能であるという点も非常に大きく,デザパタにおけるstrategyパターンを静的な形で適用したものであると見ることができると思います.
簡単にまとめるとSTLは,デザパタの特にiteratorパターンとstrategyパターンを汎用プログラミングの枠組みで積極的に適用したもので,その意味でデザパタと切っても切れない関係にある,と言えるでしょうか.もちろん,オブジェクト指向によるカプセル化・抽象化による貢献も大きいのは言うまでもないですが.
ただ,残念なのは上記のような効率と汎用性の両立を重視するあまり,非常に理解と利用が難しいものになっている点でしょう.もちろん,vectorを適当にいじるだけでも十分STLの恩恵は受けられるのですが,真価を発揮させるには上のことを良く理解した上で,『TC++PL』と同じ厚さのある『C++標準ライブラリ チュートリアル&リファレンス』(asin:4756137156)あたりを手元にリファレンスとしておいておいて,かつ『Effective STL』(asin:4894714108)を精読しなければならない,なんて事態になっていて,以前紹介した「STLは異なる言語」(id:Cryolite:20040411)という表現がいかに的を射た表現かと思い知らされますw.
P.S. ところでJ2SEって何ですか?(爆