gpt4 book ai didi

c++ - 如何将函数对象与数组一起使用?

转载 作者:搜寻专家 更新时间:2023-10-31 02:07:37 28 4
gpt4 key购买 nike

我想编写一个 C++ 通用算法,它可以处理集合、列表、映射、 vector 等...所以这个算法接受一个容器和一个函数对象,所以我可以检查某些条件。

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

我在将函数对象传递给函数时遇到问题,因为我收到此错误(在 main 的第二行):

"Multiple markers at this line - Invalid arguments ' Candidates are: void functionA(#0 &, #0 &, #1) ' - invalid initialization of non-const reference of type 'int*&' from an rvalue of type 'std::array::iterator {aka "

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

我试过的:

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

}

最佳答案

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

改变functionA的参数类型为pass-by-value,例如

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

LIVE

关于c++ - 如何将函数对象与数组一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48435242/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com