メルマガ:あゆしゃのC言語プログラミング
タイトル:あゆしゃのC言語プログラミング(Vol.561) テンプレート木構造4 ソート  2005/05/16


/*========================================================*/
    <<<あゆしゃのC言語プログラミング>>>
/*========================================================*/
 第561回 テンプレート木構造4 ソート
 発行    2005年5月16日(月曜日)
 発行数   約2600

{magclick}
/*========================================================*/
 はじめに ( 決り文句 )
/*========================================================*/
・このメールマガジンは、主にまぐまぐさんから発行しています。
・ジャンルは、マルチメディアのプログラム、C言語です。
・横60文字で作成し、インデントは大抵半角スペース4つです。
・ここで扱うプログラムは、C言語と半光年以内のものです。
・登録解除は、メルマガのホームページでお願いします。
・過去ログはバックナンバー(下欄参照)を活用して下さい。
・内容は私が感じたもので、最新の技術も、へたれもあります。
・わかりやすさを優先させる為、たまに嘘があるかもしれません。
・セキュリティ突破のため、暗号化された単語があります。

/*========================================================*/
 ご挨拶
/*========================================================*/

 こんにちは。あゆしゃです。

 皆さんは、13日の金曜日はお変わりなかったでしょうか。

 私には、とんでもないことが起こりました。

★上司から出頭命令!

 ・・・何かしたかな?(いや、仕事していないから?)

 やはり13日の金曜日は不吉なことが起こるのですね。

{magclick}
/*========================================================*/
 今回のお題  << テンプレート木構造4 ソート >>
/*========================================================*/

 引き続き、テンプレートのお話です。

 前回までに、木構造クラスの追加処理まで作りました。

 今回は、ループについての処理です。

/*========================================================*/

 STLのmapのように、イテレータを使うのは定義が面倒です。

 そこで、なるべく簡単なループ処理ができるように考えます。

CTree<CString,data_t> data;
data.sort();
for( data_t* pd = data.begin(); pd; pd = data.next( pd ) ) {

 このように記述できれば、簡単です。

/*========================================================*/

 sort関数は、木構造をたどっていき、prevとnextを設定する
関数です。
 これはマクロ版と同じです。

 マクロ版のソート処理は、このようになっています。

// ソート処理関数定義 // The sorting processing function def
#define DEF_SORTTREE_FUNCS( type, name, m_tree );          \
type* sort_##name##_at( type* pt, type* prev ) {           \
    if( pt ) {                                             \
        prev = sort_##name##_at( pt->left, prev );         \
        pt->prev = prev;                                   \
        if( prev ) prev->next = pt;                        \
        prev = sort_##name##_at( pt->right, pt );          \
    }                                                      \
    return prev;                                           \
}                                                          \
void sort_##name( void ) {                                 \
    sort_##name##_at( m_tree, NULL );                      \
}                                                          \
; /* end of #define DEF_SORTTREE_FUNCS -------------------*/

 これと同じことをします。

Data* CTree::Data::_sort( Data* prev )
{
    if( left ) prev = left->_sort( prev );
    this->prev = prev;
    if( prev ) prev->next = this;
    if( right ) prev = right->_sort( prev );
    return prev;
}
void CTree::sort()
{
    if( data ) data->_sort( NULL );
}

 CTree::Dataの関数とすることで、ptがthisに置き換わって
います。

/*========================================================*/

 beginは、単純に左端を探せばよいでしょう。

DataType* CTree::begin()
{
    Data *pt = data;
    while( pt->left ) pt = pt->left;
    return ( Data* )pt;
}

 nextは、その続きを返します。

 構造体は継承されているので、ptはそのままData*にキャスト
できます。

DataType* CTree::next( DataType* pt )
{
    Data* pd = ( Data* )pt;
    return pd->next;
}

{magclick}
/*========================================================*/
 さいごに
/*========================================================*/

 今後の予定表です。

済 CImageサンプルの説明(していなかった?)
済 ヒステリシス1 ヒステリシスとは座標変換
済 ヒステリシス2 ヒステリシスとは状態遷移
済 ヒステリシス3 ヒステリシスとはファジィ
済 ヒステリシス4 テンプレートで作成しよう
済 ヒステリシス5 名前空間にまとめよう
済 テンプレート木構造1 TreeMasterをテンプレートに
済 テンプレート木構造2 クラス設計
済 テンプレート木構造3 追加、検索
済 テンプレート木構造4 ソート
第562回 テンプレート木構造5
第563回 ガベージコレクタ1 テンプレートの隠蔽
第564回 ガベージコレクタ2 ユーザ設計
第565回 ガベージコレクタ3 クラス設計
第566回 ガベージコレクタ4 登録、削除処理
第567回 ガベージコレクタ5 Attach、Detachの処理
第568回 キャラエディッタ1 ソフトの説明

 あくまでも予定ですが、なんだか順調に話が進んでいます。

{magclick}
/*========================================================*/
 次回予告
/*========================================================*/

 次回は5月18日(水曜日)に、第562回をお送りします。
 お題は「テンプレート木構造5」

 テンプレート版木構造の全体と使用例を確認しましょう。

 お楽しみに!

/*========================================================*/
 最後の決り文句
/*========================================================*/
 このメールマガジンは、まぐまぐさんから発行しています。
 このメールマガジンを解除したい場合は、まぐまぐさんをご利用
ください。このメルマガのまぐまぐアイディーは最後にあります。
 このメールマガジンには広告が挿入されていますか?
 このメールマガジンの内容に文面の引用はありませんか?
 めーらっくすの場合はめーらっくすの利用方に従ってください。
 このメールマガジンの内容の、転用、流用、宣伝、リンク、
48キロ以下級に出場可能です なんて大歓迎です。

{magclick}
/*========================================================*/
 
/*========================================================*/

発行者 あゆしゃ

ホームページ::あゆしゃの世界
http://ayusya.hp.infoseek.co.jp/

ご意見・ご感想・ご質問メール
mailto:ayusya@flamenco.plala.or.jp

まぐまぐ::アイディー
0000020674

まぐまぐ::登録と解除
http://www.mag2.com/m/0000020674.htm

まぐまぐ::バックナンバー
http://jazz.tegami.com/backnumber/frame.cgi?id=0000020674

めーらっくす::アイディー
MM3E1AEE285AB4F

めーらっくす::登録と解除
http://www.mailux.com/mm_dsp.php?mm_id=MM3E1AEE285AB4F 

めーらっくす::バックナンバー★最近のものならこちらが便利★
http://www.mailux.com/mm_bno_list.php?mm_id=MM3E1AEE285AB4F

ブラウザの閉じるボタンで閉じてください。