如何使用数组函数对象?

时间:2018-01-25 03:36:53

标签: c++ arrays algorithm

我想编写一个可以处理set,list,map,vector等的C ++泛型算法......所以这个算法接受一个容器和一个函数对象,所以我可以检查某些条件。

该算法需要根据一定条件检查容器中最长的序列并返回其长度。

我在将函数对象传递给函数时遇到了麻烦,因为我得到了这个错误(在main的第二行):

  

“此行的多个标记      - 无效的参数'候选者是:void functionA(#0&,#0&,#1)'      - 无效初始化'int *&'类型的非const引用来自'std :: array :: iterator {aka“

类型的右值

我不明白这个问题,因为函数对象中有一个operator():\即使我先调用构造函数,我仍然会收到此错误..

我尝试了什么:

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);

}

1 个答案:

答案 0 :(得分:2)

问题是std::array::begin按值返回,这是一个临时的,不能绑定到非const的左值引用(即T&)。

functionA的参数类型更改为按值传递,例如

template<typename T,typename Predicate>
void functionA(T it1 , T end1,Predicate pred){

LIVE