エッセンシャルC ++ 3.1コードセクションの演習 - センチネル方法

#include " IncrementArray.hpp " 

テンプレート <型名要素>  
要素 * find_address(要素*配列、int型のサイズ、要素&値)
{ 
    もし(配列||サイズ<!1 
    { 
        戻り 0 ; 
    } 
    のためにint型 i = 0 ; iは、サイズ<; ++ I、++ アレイ)
    { 
        もし、((*配列)== 値)
        { 
            戻りアレイ。
        } 
    } 
    戻り 0 
} 

テンプレート<型名要素>  
要素 * use_sentinel(要素* first_address、素子*センチネル、要素&値)
{ 
    場合(first_address ||!センチネル)
    { 
        戻り 0 
    } 
    のための(; first_address =センチネル;!++ first_address)
    { 
        もし、((* first_address)== 値)
        { 
            戻りfirst_address。
        } 
    } 
    戻り 0 
} 

int型のmain()
{ 
    COUT << 、 " こんにちは、ハル\ n " string_array [ 9 ] = { " ちょっと"" ちょっと"" あなた"" あなた"" I "" しないでください"" のように"" あなた"" ガールフレンド" }; 

    ベクター < ストリング >アヴリル(string_array、string_array + 9 )。
    文字列は、誰= "

    裁判所未満 << " 私はあなたのガールフレンドが好きではない私は彼女の住所を知っている:" << find_address(&(アヴリル[ 0 ])、9、だれ)<< てendl; 


    INT integer_array [ 4 ] = { 1234 }。
    int型 4 = 4 ; 
    裁判所未満 << " はどこ4だああ、ここにある:?" << use_sentinel(&(integer_array [ 0 ])、&(integer_array [ 0 ])+ 5、4)<< てendl;

    ] = { 1123581321 }。
    ダブルダ[ 8 ] = { 1.02.03.04.05.06.07.08.0 }。
    文字列 SA [ 4 ] = { " LIM "" AAA "" DDD "" DCC "}。

    INT * PI = use_sentinel(IA、IA + 8、IA [ 3 ])。
    二重 * PD = use_sentinel(DA、DA + 8、DA [ 3 ])。
    ストリング * PS = use_sentinel(SA、SA + 4、SA [ 2 ])。

    裁判所未満 << " PS = " << PS << " PD = " << PD << " PI = " <<パイ<< てendl; 

    リターン 0 ; 
}

出力:

こんにちは、ハル。
私はあなたのガールフレンドが好きではありません。0x1b1b70:私は彼女の住所を知っています
4はどこですか?ああ、ここにある:0x72fc6c
ps=0x72fbb0 pd=0x72fc08 pi=0x72fc3c
 
添加另一个函数:
template <typename elemType>
const elemType * find_ver5(const elemType *first,
            const elemType *last, const elemType &value )
{
    if ( ! first || ! last )
        return 0;

    // while first does not equal last,
    // compare value with element addressed by first
    // if the two are equal, return first
    // otherwise, increment first to address next element

    for ( ; first != last; ++first )
        if ( *first == value )
            return first;

    return 0;
}
main函数中需要这么定义,加const。
const
int *pi = find_ver5(ia,ia+8,ia[3]);
否则无法编译通过。

おすすめ

転載: www.cnblogs.com/CodeWorkerLiMing/p/10992038.html