我想要通过仿函数和for_each()实现查找的功能。(即通过回调函数返回拿到迭代器)
错误 C2664 “void mysearch::operator ()(std::vector
#include
#include
#include
using namespace std;
class mysearch
{
public:
void operator()(vector<int>v) {
it = v.begin();
for (; it != v.end(); ++it)
{
if (*it == 4)
break;
}
}
public:
vector<int>::iterator it;
};
int main()
{
vector<int>v;
for (int i = 0; i < 10; ++i)
v.push_back(i);
mysearch search;
search = for_each(v.begin(), v.end(), mysearch());
cout << *(search.it) << endl;
return 0;
}
错误 C2664 “void mysearch::operator ()(std::vector
源码:
template _InIt, class _Fn>
_CONSTEXPR20 _Fn for_each(_InIt _First, _InIt _Last, _Fn _Func) { // perform function for each element [_First, _Last)
_Adl_verify_range(_First, _Last);
auto _UFirst = _Get_unwrapped(_First);
const auto _ULast = _Get_unwrapped(_Last);
for (; _UFirst != _ULast; ++_UFirst) {
_Func(*_UFirst);
本来仿函数是这样写的,我想要通过仿函数和for_each()实现查找的功能,改成上面提问的代码块后还是不可以。
class mysearch
{
public:
vector<int>::iterator operator()(vector<int>v){
vector<int>::iterator it=v.begin();
for(;it!=v.end();++it)
{
if(*it==4)
return it;
}
}
};
我想要通过仿函数和for_each()实现查找的功能。(即通过回调函数返回拿到迭代器)
该回答引用GPTᴼᴾᴱᴺᴬᴵ
在您的代码中,mysearch类的operator()函数接收的是一个vector类型的参数。但是,在调用for_each()函数时,您的第三个参数是mysearch类的一个实例,而mysearch()表示的是一个无参构造函数。因此,for_each()函数会试图将整数参数传递给mysearch类的operator()函数,导致了错误。
-
要解决这个问题,您需要将mysearch()修改为mysearch对象的一个实例,并将该实例传递给for_each()函数。然后,for_each()函数将调用mysearch类的operator()函数,其中参数是迭代器所指向的值。可以按以下方式修改代码:
int main()
{
vector<int> v;
for (int i = 0; i < 10; ++i)
v.push_back(i);
mysearch search;
search = for_each(v.begin(), v.end(), mysearch());
cout << *(search.it) << endl;
return 0;
}
将其修改为:
int main()
{
vector<int> v;
for (int i = 0; i < 10; ++i)
v.push_back(i);
mysearch search;
for_each(v.begin(), v.end(), search);
cout << *(search.it) << endl;
return 0;
}
这里,您需要将mysearch()更改为search。现在,for_each()函数将接收mysearch对象的实例,而不是mysearch()的一个匿名实例。
问题我已经解决了,GPT的解决方法我试过了,不行。for_each()函数是强制进行了元素从beg到end的遍历,并返回仿函数的最终状态,所以做不到题主的要求。要想实现返回特定查找元素的迭代器,还是得用find_if();