使用泛型算法的错误
#include <iostream>
#incldue <string>
using namespace std;
class Counter{
public:
Counter(char c):_c(c){}
bool operator()(const string &str){return str.find(_c) != string::npos;}
private:
char _c;
};
int Find(const string &str)
{
return count_if(str.begin(),str.end(),Counter( ', '));
}
int main()
{
string str( "asdfkasdf,asdfiekf,afksf ");
cout < <Find(str) < <endl;
system( "pause ");
return 0;
}
错误信息
C:\Dev-Cpp\include\c++\3.4.2\bits\stl_algo.h In function `typename std::iterator_traits <_Iterator> ::difference_type std::count_if(_InputIterator, _InputIterator, _Predicate) [with _InputIterator = __gnu_cxx::__normal_iterator <const char*, std::basic_string <char, std::char_traits <char> , std::allocator <char> > > , _Predicate = Counter] ':
[解决办法]
bool operator()(const string &str){return str.find(_c) != string::npos;}
参数不对
bool operator()(char )
这样才可以
[解决办法]
你定义的class Counter中
bool operator()(const string &str)
需要的参数是const string。
但是看一下你的Find函数:
int Find(const string &str)
{
return count_if(str.begin(),str.end(),Counter( ', '));
}
str.begin()返回的const_iterator所指向的是一个char,参数类型不匹配。
具体怎么改,还要看你想实现什么功能。你的原意是什么
[解决办法]
呵呵,应该是这样的。
如何写functor,还是找本《STL源码剖析》认真学学吧。
[解决办法]
class Counter{
public:
Counter(char c):_c(c){}
bool operator()(char c){return c == _c;}
private:
char _c;
};
int Find(const string &str)
{
return count_if(str.begin(),str.end(),Counter( ', '));
}
[解决办法]
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
class Counter{
public:
Counter(char c):_c(c){}
bool operator()(const char c){return c==_c;}
private:
char _c;
};
int Find(const string &str)
{
return count_if(str.begin(),str.end(),Counter( ', '));
}
int main()
{
string str( "asdfkasdf,asdfiekf,afksf ");
cout < <Find(str) < <endl;
system( "pause ");
return 0;
}