
/*
    KAB-studio.h
        　ＫＡＢ−ｓｔｕｄｉｏで先週更新した内容
        が格納されたヘッダーファイルです（笑）。

    (C)KAB-studio ALL RIGHTS RESERVED.
        http://www2.justnet.ne.jp/~kabstudio/
        kab-studio@multimedia.design.co.jp

    送信日： 1999/08/02(Mon) No.018
    配信数： 2550（ Mag2 + Pubzine ）
    発行元： まぐまぐ( URL: http://www.mag2.com/  ID: 0000012198 )
    発行元： Pubzine( URL: http://www.pubzine.com/  ID: 590 )
*/

/*            １９９９年８月２日（月）の更新                */

・表紙を８月バージョンに！
　毎月恒例、新しい表紙です。今回は時間がないってことで、これまでとは
かなり違う感じの着色方法をしてます。ま、たまにはってことで。


/*                    チョー普通な日記                    */

１９９９年７月２５日（日）：
　勉強したりイラスト描いたり。テレビ見たりって感じ。

１９９９年７月２６日（月）：
　テスト前にプログラミング（爆）。毎月恒例ベクターＤＬ数。そしてハト。

１９９９年７月２７日（火）：
　チョー遠回りしてガッコ行ってテストばっちりでテスト終わりで夏休みは
こんなことしたい！！

１９９９年７月２８日（水）：
　８月表紙完成、myShade に苦戦、そしてツッコミ。

１９９９年７月２９日（木）：
　フランス料理はあんまだったり３Ｄ金菜さんに苦戦したりな日々。

１９９９年７月３０日（金）：
　ハトは降ってくるわ購読登録数が増えるわ新キーボードでかなりピンチだ
わで色々あった日。たぶん。

１９９９年７月３１日（土）：
　されど shade の日々。そしてアド街ック天国に立川登場！　やっぱロー
カルネタはいいねぇ。


/*                    金菜さんの憂鬱                        */

１９９９年７月２５日（日）：
STL について
標準Ｃ＋＋ライブラリの一部
解説はＶＣ付属のものについて
お便り
#include "stdafx.h"　としない方法
マクロで分岐

１９９９年７月２６日（月）：
STL について
アルゴリズム、関数オブジェクト、イテレーター、コンテナ、サポート
「アルゴリズム」はＳＴＬの中心的関数群
「関数オブジェクト」と「イテレーター」はアルゴリズムを助ける
「コンテナ」はＭＦＣでいうところの「コレクションクラス」のこと
お便り
DLL と再コンパイル
必要な場合とそうじゃない場合がある
定義部と宣言部
お便り
最大値と最小値
std::sort() でソートする方法
サンプルコード

１９９９年７月２７日（火）：
昨日のお便りの続き
送られてきたコード
配列と for で縮小
サンプルコード

１９９９年７月２８日（水）：
STL について
サンプルコード
std::find() を使って文字数を調べる
ヘッダーファイルには拡張子がついていない
お便りｘ２
他のウィンドウを操作する
サンプルコード
ウィンドウを検索してメッセージを送る

１９９９年７月２９日（木）：
STL について
std::find() の使い方
第２引数に注意
戻り値もポインタ
お便り
std::fstream で CFile::GetLength() の代わりは？
「ファイルの一番最後の位置」で取得できる
サンプルコード
std::fpos に注意
__intN を標準Ｃ＋＋で使えるか
たぶん無理

１９９９年７月３０日（金）：
STL について
std::find() の中身
サンプルコード
テンプレート引数を置き換えてみる
サンプルコード
ＳＴＬの「アルゴリズム」は「単純なことをする」関数群
お便り
std::fstream で１ビットずつ送りたい
std::bitset を使う
サンプルコード
エンディアンに注意

１９９９年７月３１日（土）：
STL について
アルゴリズムの他の関数について
std::random_shuffle() 
サンプルコード
std::copy() と std::fill() 
サンプルコード
書き込み側は「終わり」を指定してない
お便り
ビットマップの転送形式


/*                    #pragma twice                        */


　Version 2.7
短いことはいいことだ？

「さて、前回の続き」
『この前って、確か ++ っていうのだったよね』
「そ。たとえばこんなプログラム」

void CCalcDlg::OnBEqual() 
{
    int iBox;
    iBox = 0;
    TRACE( "%d\n", ++iBox );
}

『えっと、 ++iBox は iBox += 1 と同じだから、１って出てくるよね』
「そ。じゃあ、これはどう？」

void CCalcDlg::OnBEqual() 
{
    int iBox;
    iBox = 0;
    TRACE( "%d\n", iBox++ );
    TRACE( "%d\n", iBox );
}

『 ++ が後ろに付いてるね。あともう一度表示してるし、わざわざこういう
のがあるってことは、ちょっと結果違うってことよね』
「とりあえず試してみれば？」
『はーい』
　ビルドして実行する。結果は……。
0
1
『あ、ゼロ！　で、その次ので１……ってことは、１個目の TRACE() と２
個目の TRACE() の間で１増えたってこと？』
「そういうこと。〈後ろに付いた ++ 〉は、次の行に行く直前に１増やすっ
ていう機能を持ってるわけ」
『前に付けたらすぐに＋１、後ろに付けたらあとで＋１ってことね。でもな
んかこんがらがりそう……』
「ま、普通は〈前付け〉の方しか使わないんだけど、よく使う場面もあって。
とりあえず憶えておいてね」
『ふぅん』
「あ、あと用語。こんなふうに〈１増やす〉ことを〈インクリメント〉って
いいます」
『い、いんくりめんと？』
「〈増える〉っていう英語を〈インクリーズ〉っていうでしょ、その名詞版っ
てとこかな」
『でも憶えにくいなー』
「でもよく出てくる単語だから憶えといてね。あと〈１減らす〉ことを〈デ
クリメント〉っていうから」
『まあこれは〈インクリメント〉が憶えられたら大丈夫そうね』
「あと ++ のことを〈インクリメント演算子〉、 -- のことを〈クリメント
演算子〉っていいます」
『これもそのまんま……あれ？　前付けとか後ろ付けの区別は？』
「付けるときには〈前置インクリメント演算子〉とか〈後置インクリメント
演算子〉っていうかな。でもあんま言わないけど……」
『なんで？』
「たいがい〈前置〉の方しか使わないから、〈インクリメント演算子〉って
言ったら〈前置インクリメント演算子〉のこと、って感じかな。ま、〈前置〉
と〈後置〉で動作が大きく変わるようなプログラムはあんま作らない方がい
いんだけどね」
『え、なんで？』
「そりゃ火美ちゃんみたいに混乱するから」
『へ？　プログラマーってそういうのへっちゃらじゃないの？』
「プログラマーっていうのは〈プログラムが組める人〉であって、〈驚異的
な頭脳と集中力を持つ人〉じゃないんだから。だいたい」
『だいたい？』
「もしそうなら、火美ちゃんに教えようなんて思わないよ」
『うわむっか！』
「言い換えれば、プログラマーなんて誰にだってなれるってこと。もしかし
たら、フツーの人の方が、優れたプログラマーになれる素質、あるかも」
『どして？』
「今みたいに〈混乱する〉って思えば、安全策取るでしょ。そういう人の方
が安定性の高いプログラム作れるわけ。これが〈オレは大丈夫！〉なぁんて
うぬぼれてる人は、いつまで経っても……」
『ま、自分を過信しすぎるなって、どんな事でも言えるんだろうけどねー』
「そだね。火美ちゃんも、くれぐれも過信しないようにねー」
『もっちろん！』
「何その自信は……じゃ、話を元に戻して、ちょっと小ネタ紹介しようか」
『小ネタ？』
「この前、こんなプログラムあったよね」

void CCalcDlg::OnBEqual() 
{
    int iBox;
    iBox = 0;
    while( iBox < 5 )
    {
        ++iBox;
        TRACE( "%d ", iBox );
    }
}

『うん、１から５まで表示するの』
「これは、こんなふうに短縮できます」

void CCalcDlg::OnBEqual() 
{
    int iBox;
    iBox = 0;
    while( iBox < 5 )
    {
        TRACE( "%d ", ++iBox );
    }
}

『これだとすっきりするね』
「でも注意して欲しいこと。たとえば」

void CCalcDlg::OnBEqual() 
{
    int iBox;
    iBox = 0;
    while( iBox < 5 )
    {
        TRACE( "%d ", ++iBox );
    }

    TRACE( "%d\n", iBox );
}

「このプログラム、目的は最後の TRACE() で出力するだけで、 while の中
の TRACE() は、ちゃんと数が増えてるかのチェックだとします」
『うんうん』
「ちゃんと増えてたのを確認したから、その確認用出力をやめたいとき、ど
うする？」
『そりゃ、こんな感じにコメントアウトしたりするんじゃない？』

void CCalcDlg::OnBEqual() 
{
    int iBox;
    iBox = 0;
    while( iBox < 5 )
    {
//        TRACE( "%d ", ++iBox );
    }

    TRACE( "%d\n", iBox );
}

「ホントに？」
『ホントにって、試してみればいいじゃない。ビルドして実行……あれ？』
「アプリが止まっちゃったね」
『え？　え？』
「こういうときはどうするんだっけ？」
『え、えっと、たしか、そう、×印！　あ、なんとかなったみたい』
「なんでこうなっちゃったか、わかる？」
『ん〜と、このまえこれで無理矢理終わらせたときは、 while の繰り返し
がずーっと続いてたからなんだよね』
「そうそう」
『ってことは、 iBox がいつまでも５より大きくならない……あ、 ++iBox
の行も一緒にコメントアウトしちゃったからだ』
「そういうこと。こういうことは、１行に詰め込まなければ起きなかったこ
とでしょ」
『うん、２行に分けてたら、 TRACE() だけコメントにできてたんだもんね』
「１行に詰め込んで書くと、こういう弊害があるってとこかな」
『１行に詰め込むときは気を付けて、ってことね』
「気を付ける自信、ある？」
『もっちろん！』
「火美ちゃん！！」
『な、なに！？』
「ほんっとーに、どんな時でも気を付けられる？」
『え……』
「徹夜の時でも？　空腹の時でも？　１０時間働きっぱなしの時でも？」
『ふ、ふぇ……』
「何年も何十年も、ずっとずっと気を付けられる！？」
『ふぇ、ふぇえええーん！！』
「げ！　ご、ごめん、怒鳴っちゃったりして」
『……………………ぐすん』
「……でも、僕が何言いたいか、分かる？」
『…………過信するな、ってこと』
「そういうこと」
『モニター撫でられてもうれしくないもん……』
「怒鳴っちゃって悪かったけど、こういうことってとっても大事なことだか
ら」
『うん。よーするに、１行に詰め込んじゃダメってことよね』
「そういうわけでもないんだけど」
『なんやとコラ、あんだけゆーといてそれはないやろがっ！！』
「う”、まーまー怒んないで」
『で、どういうこと？』
「そうだね、僕は１行に詰め込むのは嫌い。だから、火美ちゃんには奨めな
い。けど、詰め込まないと行数が増えるでしょ」
『うん、１行が２行、倍だもんね』
「行数が増えると逆に見にくい部分もあるし、１行に書いてすっきりさせた
方が見やすいこともある。で……」
『で？』
「こういう部分は人それぞれ。僕が１行で書くところを、火美ちゃんは２行
で書くかもしれない」
『ん……』
「でも、そういうのを何も考えずに決めたり、理由のない自信だけで決めて
欲しくはない。自分がすることに、人を説得できる理由を持って欲しいかな」
『その理由を持つことが大事、ってことね』
「そういうこと！　わかってきたね。……もちょっといいかな？」
『うん、大丈夫。今日も憶えたこと少なかったし』
「そだね。じゃ、ついでにふたつほど、省略する方法を教えようか」
『げ、そーゆーの教えといて使うなっていうの？』
「でも他の人が使ってたら？」
『う〜』
「じゃ、まずさっきのプログラム」

void CCalcDlg::OnBEqual() 
{
    int iBox;
    iBox = 0;
    while( iBox < 5 )
    {
        TRACE( "%d ", ++iBox );
    }
}

「これは、こう書き直せます」

void CCalcDlg::OnBEqual() 
{
    int iBox;
    iBox = 0;
    while( iBox < 5 )
        TRACE( "%d ", ++iBox );
}

『あ、中カッコがなくなった！』
「でもこれはダメだよ？」

void CCalcDlg::OnBEqual() 
{
    int iBox;
    iBox = 0;
    while( iBox < 5 )
        ++iBox;
        TRACE( "%d\n", iBox );
}

『試してみるね……あ、５しか表示されないね』
「どうしてだと思う？」
『よーするに、 TRACE() が繰り返されてないんだよね』
「手のひらアイコンで止めてみれば分かるけど、繰り返しは ++iBox; の行
しかされてないんだよね」
『while の次の行だけってことね。なんかインデントに惑わされそう……』
「そ、書き方に惑わされないようにね。もうちょっと具体的に言えば、小
カッコ閉じから行末まで、かな。だからこれとも同じ」

    while( iBox < 5 ) ++iBox;

『う〜、なんか変な感じ。でも、これってまとめてコメントアウトできるか
ら、逆にその方がいいってこと、ない？』
「うんうん、そういうふうに考えるよーにしてこーね」
『うん』
「でも中カッコ使った時のと比べると、ちょっと違和感あるでしょ」
『それはあるかも。 while の繰り返しが右か左か、っていうの混乱しそう』
「だからこういうふうに書く人もいたり」

void CCalcDlg::OnBEqual() 
{
    int iBox;
    iBox = 0;
    while( iBox < 5 ){
        ++iBox;
        TRACE( "%d ", iBox );
    }
}

『中カッコの位置が違うだけで、かなり感じちがうねー。あ、そういえば、
なんで中カッコの中は、何行でもくりかえせるの？』
「そうだね、中カッコと中カッコ閉じが、外から見ると１行と同じ、ってと
ころかな」
『雰囲気的にはこんな感じ？』

    while( iBox < 5 )
        {++iBox;TRACE( "%d ", iBox );}

「うん、そんな感じかな」
『あともうひとつは？』
「今日はちょっと長くなっちゃったし、また今度にしようか」
『はーい』


/*
    Preview Next Story!
*/
『プログラミングって結構厳しい世界……』
「そう？　僕は逆に楽な世界だと思うけどね」
『水希ちゃんはエリートだもの』
「う、なんかなー……」
『というわけで次回』
＜ Version 2.8 もしももしもがあったなら ＞
「につづく！！」
『でもぢつは私もエリート？』
「なんで？」
『生まれてからプログラミングしかしてないもん』
「そういやそうだ……」



/*            １９９９年８月９日（月）の更新予定                */

・未定（汗）。
　はて、どうしよう。色々したいことはあるんだけどね。ＫＴＬの更新や、
プログラミング辞書のＣｏｄｉａｎからの移転、ようこその一新とか、ま、
なんかできたらできたってことで＜だったら予告の意味ないやん（爆）。



/*                        ご注意！！                        */
/*

　このメールマガジンをそのまま「返信」すると、作者のメールアドレス
（kab-studio@multimedia.design.co.jp）へと転送される仕組みになってい
ます。「まぐまぐ」もしくは「Ｐｕｂｚｉｎｅ」の管理者へメールを送りた
い場合には、直接そちらへメールを送ってください。

*/
/*

　このメールマガジンの購読登録を解除する場合には

http://www2.justnet.ne.jp/~kabstudio/Info/MailMagazine/

　が便利です。また、購読解除についての詳しい情報は、
登録時に送られてきた「まぐまぐ」もしくは「Ｐｕｂｚｉｎｅ」からの
メールをお読みください。

*/
/*

　本誌のバックナンバーはＫＡＢ−ｓｔｕｄｉｏにはありません。
　まぐまぐの

http://bigbeat.tegami.com/~mgsearch/frame.cgi?id=0000012198

　にありますのでそちらをどうぞ。

*/
/*
    KAB-studio.h
    Weekly Mail Magazine.
    Written by Kaburaya Seiden.

    (C)KAB-studio ALL RIGHTS RESERVED.
        http://www2.justnet.ne.jp/~kabstudio/
        kab-studio@multimedia.design.co.jp
*/


/*                    See you next week!!                    */


