【发布时间】:2018-01-25 03:36:52
【问题描述】:
我想写一个 C++ 通用算法,它可以在集合、列表、映射、向量等上工作......所以这个算法接受一个容器和一个函数对象,所以我可以检查某些条件。
该算法需要根据一定的条件检查容器中最长的序列并返回其长度。
我在将函数对象传递给函数时遇到了问题,因为我收到了这个错误(在 main 的第二行):
"此行有多个标记 - 无效参数 ' 候选者是:void functionA(#0 &, #0 &, #1) ' - 从 'std::array::iterator {aka "
类型的右值对 'int*&' 类型的非常量引用的初始化无效
我不明白这个问题,因为在函数对象中有一个运算符 () :\ 即使我先调用构造函数,我仍然会得到这个错误..
我尝试了什么:
template<typename T,typename Predicate>
void functionA(T& it1 , T& end1,Predicate pred){
for(;it1 != end1; ++it1){
T it2=it1++;
if(!pred(*it1,*it2)){
std::cout << *it1 << "\n" ;
return;
}
}
std::cout <<"not found" << "\n" ;
}
class FindFirst {
public:
FindFirst();
bool operator()(int f , int s) const {
return f < s;
}
};
int main() {
std::array<int,11> myarray = {1,2,4,7,10,14,3,6,12,24,48};
functionA(myarray.begin(),myarray.end(),find);
}
【问题讨论】: