|
分類:[.NET 全般]
文字列のある範囲の中に文字'p'がいくつあるか、もしくは文字'p'以外がいくつあるかをカウントするのにcount_if, bind1st, equal_to, not_equal_toを以下のように使いました。
#include <algorithm> #include <cstdio> #include <functional> #include <iostream> #include <string> using namespace std;
int main() { string s("alppjaaejkappp");
printf("%d\n", count_if(s.begin(), s.end(), bind1st(equal_to<char>(), 'p'))); printf("%d\n", count_if(s.begin(), s.end(), bind1st(not_equal_to<char>(), 'p'))); }
実行結果: 5 9
上のコードのようにcount_ifへのbind1st, equal_toの渡し方は分かるのですが、bind1stを変数に入れて持ち歩きたい場合の、その変数の型宣言が分かりません。
#include <algorithm> #include <cstdio> #include <functional> #include <iostream> #include <string> using namespace std;
int main() { string s("alppjaaejkappp");
// ???の部分がわからない ??? eq = bind1st(equal_to<char>(), 'p'); ??? ne = bind1st(not_equal_to<char>(), 'p'); ??? cmp = equal_to<char>();
// 文字'p'がいくつあるか count_if(s.begin(), s.end(), eq);
// 文字'p'以外がいくつあるか count_if(s.begin(), s.end(), ne);
char c = 'a'; // 文字cと比較関数cmpでカウント count_if(s.begin(), s.end(), bind1st(cmp, c)); }
???の部分は、どのように書けばよいのでしょうか?
|