STL怎样实现这样的查找功能?

来源:百度知道 编辑:UC知道 时间:2024/06/18 15:54:51
如果要写一个函数,从指定的vector<int>中查找绝对值等于指定的值n的那一项iterator,如何实现呢?

函数如下:
vector<int>::iterator search(const vector<int>& vect, int n)
{
return find_if(vect.begin(), vect.end(), MatchCase);
}

然后我得写一个作为匹配条件的函数MatchCase,可是原来的n该怎样传给这个函数呢?

bool MatchCase(int num) { return ???; }

另外,用binary_search倒是可以把n传过去,不过,binary_search返回的只是true/false,表示有没有找到,该如何得到符合条件的iterator呢?

还有其它的函数,find()只能查找指定的值,不能指定匹配条件,该怎样又能指定值,又能指定匹配条件,又可以得到匹配成功的iterator呢?

用函数对象吧,这样就可以传参数了,当然具体比较逻辑你自己写好了

#include <vector>
#include <algorithm>

using std::vector;

class MatchCase {
public:
MatchCase(int n) : num(n) {}
bool operator()(int n) {
return n == num;
}
private:
int num;
};

int main()
{
vector<int> v;
find_if(v.begin(), v.end(), MatchCase(1));

return 0;
}