記念するべき第一弾は
utilityに属するpairをつつき彫るピヨッ♪実装を見た方が話しが早いと思うから、早速実装をお見せするピヨ♪
//utility.hファイルへ実装
#ifndef UTILITY_
#define UTILITY_
#include
namespace indre {
/-----------------------------------------------------------------------
二つの対となる値を保持する構造体。
-----------------------------------------------------------------------/
template< class T1, class T2 > struct pair {
//フィールド
typedef T1 first_type;
typedef T2 second_type;
//引数を持たないコンストラクタ
pair()
: first( T1( ) ), second( T2( ) ) { }
//引数を持つコンストラクタ
pair( const T1& V1, const T2& V2 )
: first( V1), second( V2 ) { }
//テンプレートクラス
template< class U1, class U2 >
pair( const pair& X )
: first( X.first ), second( X.second ) { }
T1 first;
T2 second;
};
/-----------------------------------------------------------------------
pairテンプレートの各種演算子。
-----------------------------------------------------------------------/
template< class T1, class T2 > inline
bool operator == ( const pair< T1, T2 >& X, const pair< T1, T2 >& Y )
{ return (X.first == Y.first && X.second == Y.second ); }
template< class T1, class T2 > inline
bool operator != ( const pair< T1, T2 >& X, const pair< T1, T2 >& Y )
{ return ( ! ( X == Y ) ); }
template< class T1, class T2 > inline
bool operator < ( const pair< T1, T2 >& X, const pair< T1, T2 >& Y )
{
return ( X.first < Y.first ||
! ( Y.first < X.first ) &&
X.second < Y.second ) ;
}
}
うーん。本と同じになってしまったピヨォッ!
変えようと思ったんだけど、コードが少なすぎて変更できなかったorz
それは、さておき、例の本を読んでいない人は、演算子の定義が気になると思う。例えばここ、
return ( X.first < Y.first ||
! ( Y.first < X.first ) &&
X.second < Y.second ) ;
一見すると不思議な実装だけど、STLの実装には無駄なんて無く、これにも意味があるピヨ。この様に
一つの演算子のみを使用した方が効率がいいからなんだ。詳しい説明は難しいから今後日を改めてするピヨ♪
実装したら早速テストしよう!テストプログラムは、
STLをつつく1−pairテンプレート。仲良く行こう♪の記事にあるサンプルを使ってね♪その際、//#define TEST のコメントを解除しよう。これでテストが行えるピヨ♪
今回はこれ以上何も囀る事がないからこれでおしまい。