■
何回も書いてるのですが、僕は、「C++を嫌うのは構わないけど、あんまり知らないのにC++を馬鹿にするやつは許さない」という考えなので、何回も書きます!
僕が思ってるよりc++は凄いものなのかもしれないなぁ
std::for_eachというテンプレート関数です(で、あってますよね?)。構文じゃないですが。
giveupさんがどの程度C++を知ってて、「僕が思ってるより」と書いてるかはわからないですが、もし、
#include <algorithm> #include <iterator> #include <iostream> #include <vector> struct inc { template <typename T> void operator() (T &i) { i++; } }; int main( ) { std::vector<int> a; std::back_insert_iterator<std::vector<int> > i(a); *i++ = 4; *i++ = 2; *i++ = 3; std::for_each( a.begin(), a.end(), inc() ); std::sort( a.begin(), a.end() ); std::ostream_iterator<int> o( std::cout, "\n" ); std::copy( a.begin(), a.end(), o ); }
こういうようなコードを見て、何が起こってるかわからないけど、「C++は大したことない」と思っているのであれば、それは、間違いです!(このぐらい理解してて、それでも「C++は大したことない」と思っておられるのであれば、以下はスルーでお願いします)
上の例みたいないかにもサンプルみたいなコードは、実際はありえないので、大したことないといえば、まあそうなんですが、「実際使わないのはいらない」とか言ってる人間は、二度とSchemeとか触るべきじゃないと思います!(暴言)
STLというのは
という三層になってて、それぞれ
- 言語の機能は最小限に抑えて(STL専用の新しい組み込み構文は必要無い、という意味で)、ライブラリでなんとかしてる
- 自分で作った関数、コンテナを、自然に組み込める
- すぐに使える便利な関数とかコンテナ
というみっつの特徴と、対応してて…えーと。言葉では伝えにくい!
とにかく、STLは、データ構造、データ構造へのアクセス方法、データへの操作、を分離することが、どれほど大切なことかを教えてくれるんです。「オブジェクト指向」とか言って、データと操作を一緒にしてしまうのが、いかに愚かなことか!
「シンプルで柔軟な機能を組み合わせて処理を作れるSchemeは素晴らしいね。もうC++はいらないよ!」そんな!ひどい!ちょっと待って!C++を捨てないで!C++には、STLがあるからっ!!シンプルで柔軟な機能を組み合わせる快感はC++でも味わえるからーーー!!
…もとの話とずれすぎだと思った。