dポイントプレゼントキャンペーン実施中!

こんにちは、STL beginnerのBOUNDARYです。

以下のシーケンスにおいて、

#define BUFFER_TYPE vector<char>
BUFFER_TYPE sequence;
for(int i =0; i < 2; i++)
for(int j =0; j < 5; j++)
sequence.push_back( 'a' + j );

この中から連なる'c'と'd'の存在個数を調べたいです。

 使うアルゴリズムは"個数を調べる"わけですからcout_ifを使うと考えました。
述語オブジェクトは'c'の個数を調べるだけならbind2ndを使えばいいと思うのですが
'c'の次の'd'を検査する方法が思いつきません。

私なりに考えてみたのですが、うまくいきません。

struct CountCD : public unary_function< BUFFER_TYPE::iterator*, bool > {
public:
result_type operator()( argument_type arg )
{
return arg == 'c' && ++*arg == 'd';
}
};

として、

BUFFER_TYPE::size_type seqCount =cout_if( sequence.begin(),
sequence.end() - 1, CountCD() );

とすると、

: error C2446: '==' : 'int' 型から 'char ** ' 型への変換ができません。
整数型からポインタ型への変換には reinterpret_cast、C スタイル キャストまたは関数スタイル キャストが必要です。
: error C2040: '==' : 'char ** ' は 'int' と間接操作のレベルが異なります。
: error C2446: '==' : 'int' 型から 'char *' 型への変換ができません。
整数型からポインタ型への変換には reinterpret_cast、C スタイル キャストまたは関数スタイル キャストが必要です。
: error C2040: '==' : 'char *' は 'int' と間接操作のレベルが異なります。

とエラーが出ます。

どなたかお知恵を貸していただけないでしょうか。
Windows2000sp4 VisualC++6.0sp5を使っています。

A 回答 (1件)

エラーの原因は単純に型が違うからです。



count_if<vector<char>::iterator, bool(*)(char)>(sequence.begin(), sequence.end(), function)

と来るテンプレートですから。
    • good
    • 0
この回答へのお礼

struct CountCD : public unary_function< char, bool > {
public:
    result_type operator()( argument_type arg )
    {
        return arg == 'c' && ++arg == 'd';
    }
};
ですね・・・。
ありがとうございました。

お礼日時:2003/10/15 07:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!