C++ コンパイラに必ず付属している「標準 C++ ライブラリ」、その根幹を成すSTL と iostream 。
素晴らしい魅力を持つこのライブラリは、正しい理解をされることなく地に埋もれようとしています。それは非常にもったいないことです。このライブラリを使いこなすことで、皆さんの「 C++ プログラミングに対する概念」は大きく変わることでしょう。そして、より強固で短く、読みやすいプログラムを組めるようになるはずです。このライブラリは、それだけのポテンシャルを持っているのです。 「 STL & iostream 入門」は、 STL と iostream の「本質」を伝えます。それを知ることで皆さんは、うわべだけの使いやすさじゃない、「本物のライブラリ」というものに気付くことでしょう。そして、皆さんの C++ プログラマーとしてのレベルは必ず上がるはずです。 自分が書いた C++ プログラムをさらに精錬させたいあなた、今すぐ購読登録しましょう! |
STL って、 iostream ってなに?
STL と iostream は、「標準 C++ ライブラリ」というライブラリに含まれています。「標準」という名が付いているとおり、このライブラリは C++ プログラミングにおける最も標準的なライブラリです。
「標準」ですから、現在のほとんどすべての C++ コンパイラ/開発環境で使用することができます。さらに、このふたつのライブラリには多くの魅力が隠されています。 STL ( Standard Template Library )は for や while を取り除くためのテンプレートライブラリです。長々とした意味の分かりづらいループを、アルゴリズム・イテレーター・関数オブジェクト・コンテナを用いて分かりやすいコードへと書き換えることができます。 iostream は標準入出力・ファイル・文字配列・ std::string などあらゆる対象への書式化入出力を行うクラスを提供するライブラリです。演算子を用いた分かりやすい操作だけで簡単かつ安全に入出力を行えます。また、カスタマイズクラスを作成することでどんな対象へも簡単に入出力できるようになります。 このふたつのライブラリは「可読性」「汎用性」「カスタマイズ」という非常に魅力的であり他のライブラリにはない機能を持っています。これが逆に、このライブラリの「理解のしにくさ」へと継ながっていると言えます。「 STL & iostream 入門」では、この魅力を余すことなく伝えたいと思います。 そのため「 STL & iostream 入門」では、リファレンス性より、使い方や概念についての解説を中心に据えています。「アルゴリズム一覧」等は、後述の「副読書」などを参考にしてください。 逆に言えば、 STL と iostream の「使い方や概念」についての解説書はほとんどないということです。これらのライブラリの「本質」を理解したいあなたに送る、珠玉のメールマガジンです。 |
「 STL & iostream 入門」は……
|
|
|
STL と iostream の使い方
「 STL & iostream 入門」では「具体的な解説」しかしませんので、購読する前に「 STL と iostream は使える」という状態にまではしておいてください。
STL も iostream も「標準 C++ ライブラリ」というライブラリに含まれています。このライブラリは、現在の多くの C++ コンパイラ/開発環境に添付されています。そのため、別途「標準 C++ ライブラリ」を入手する必要はありません。 逆に、添付されていない場合には、コンパイラの性能が低いため「標準 C++ ライブラリ」を使用できない可能性が非常に高いと言えます。この場合には、最新のコンパイラ/開発環境を入手してください。
コンパイラ/開発環境ごとの確認と注意
■ gcc の場合
次のソースコードを -lstdc++ というスイッチを付けてコンパイルしてみてください。 #include <stdio.h> #include <vector> #include <iostream> #include <strstream> int main( int p_argc, char* p_argv[] ) { std::vector<int> cIntVec( 10, 100 ); char ch[260]; std::strstream cStrStrm( ch, 256 ); cStrStrm << "v[5]: " << cIntVec[5] << std::ends; printf( "%s\n", ch ); return 0; }コンパイルできて v[5]: 100 という結果が出力されればOK。 一般的な gcc では -lstdc++ のコンパイラスイッチで、標準 C++ ライブラリのインクルードファイル・ライブラリファイルを指定してくれます。 ■ Visual C++ の場合(MFCを使う場合) まず各プロジェクト内の StdAfx.h 内、 //{{AFX_INSERT_LOCATION}} と書かれた行の直前で次のファイルをインクルードしてください。 #include <vector> #include <iostream> #include <strstream> //{{AFX_INSERT_LOCATION}}標準 C++ ライブラリの各インクルードファイルは、ここでインクルードするようにしてください。他の位置だとエラーが発生する場合があります。 次に、以下の関数を適当なソースファイルに書き込んで、適当な場所から呼び出してください。例えば CxxxDlg.cpp 内に書き込んで、「ボタンを押したとき」のハンドラ関数から呼び出すとかしてください。 #define printf TRACE void Checker() { std::vector<int> cIntVec( 10, 100 ); char ch[260]; std::strstream cStrStrm( ch, 256 ); cStrStrm << "v[5]: " << cIntVec[5] << std::ends; printf( "%s\n", ch ); }ビルドが成功して、実行後アウトプットウィンドウに v[5]: 100 と表示されればOK。 MFCを使用した場合、 printf() が使用できないので、 TRACE() へと置き換える必要があります。誌面に掲載されたサンプルプログラムを使用する場合には、このように #define を使用して置き換えてください。 ■ Visual C++ の場合(コンソール) gcc と同じサンプルコードをコンパイルしてみてください。ただし、スイッチを加える必要はありません。 ■ 以上のように、コンパイラ/開発環境ごとにサンプルコードの使い方が異なります。これを踏まえて、サンプルに書かれたプログラムがうまくコンパイルできるか確認しておきましょう。 |
「 STL & iostream 入門」の命名規則について。
このメールマガジンのサンプルコードに使用している「命名規則」は、僕がいつも使っている「我流ハンガリアン記法」です。これは、あんまりよくない例ですが、それでもこれを使用することに決めました。
この命名規則は…… ・大文字小文字を使って単語を表記する。 ・クラスのプレフィックスは C 。 ・変数のプレフィックスは型を表す小文字。ただしクラスは c 。 ・さらにポインタは p 、参照は r を付加する。 ・さらに引数には p_ 、テンプレート引数には type_ を付加する。 というものです。 実際にサンプルコードを見てもらえれば分かりますが、「標準 C++ ライブラリ」はこれとは対極にある命名記法を使用しています。なので、どれがサンプルコードで新たに加えた物なのか一目で分かると思います(名前空間があるんだからホントは必要ないかも……)。 さらに付け加えれば、「標準 C++ ライブラリ」の各クラス・メンバ関数の名前は無理に短縮されているものが多くあり、分かりにくいと僕は考えるため、「あえて真似する必要はない」という意味も含めて別の命名規則を選びました。 ま、とりあえず両方の規則を見て、どちらが自分に向いてるか考えてみてください。 |
副読書について
前述の通り、「 STL & iostream 入門」はリファレンス性についてはあまり重要視していないため、「他にどんな関数があるんだろう」という場合には困ると思います。そういうときのために「副読書」の購入をお勧めします。
C++ は Effective C++ という本がお勧め。この本には演算子のオーバーロード関数の作り方やクラスの設計方法についての基本的なことが書かれています。この本を読んでおくことで STL や iostream のコードがそれほど苦なく読めるようになると思います。 STL はStandard Template Library プログラミングという本がお勧め。分かりやすく、サンプルコードも多く、リファレンス性も高いとバランスのいい内容になっています。買っておいて損はないでしょう。 この本の他に、インターネット上にもリファレンスサイトが多数ありますので探してみてください。 STL は非常に恵まれた環境と言えます。 iostream については、残念ながらお奨めの本がありません。 iostream だけの解説書がほとんどなく、 C++ の解説書のおまけとして書いてあるくらい扱いが良くないです。逆に言えば、皆さんが持っている解説書の最後に iostream の解説が載っている可能性は高いと思うので、そちらをご覧ください。 残念ながらホームページもあまりないのですが、 STL よりも古くからある分、サンプルコードはかなりの数が見つかると思います。使用例が必要なときは探してみてください。と言っても、古い書き方をされている場合にはあまり役立たないかもしれませんが……。 STL も iostream も、基本的にはテンプレートライブラリなので、たいがいソースコードが付いています。そのコードを見るのが一番かもしれません。ただし iostream はすべてがテンプレート化されているわけではないのでご注意を。 あと、 Visual C++ のように開発環境にドキュメント( MSDN )が付いている場合もあります。それもご覧ください。 |
STL & iostream 入門特製壁紙!
|
(C)KAB-studio 2000 - 2001 ALL RIGHTS RESERVED. |