用户搜索stl :: find_if

sta*_*tan 2 c++ stl

我想知道是否有办法使用stl :: find_if来搜索用户输入的值

我不知道在不使用任何不良约定(全局变量)或添加大量扩展代码的情况下这样做.

例如,如果用户输入的int为10,那么我想搜索int的向量

iterator = find_if(begin,end,pred) //but how does pred know the user inputted value?
Run Code Online (Sandbox Code Playgroud)

Gre*_*ill 6

你可以使用equal_to:

find_if(a.begin(), a.end(), bind2nd(equal_to<int>(), your_value));
Run Code Online (Sandbox Code Playgroud)


Dan*_*ker 5

pred必须是具有重载()算子的类型的实例,因此它可以被称为像的功能.

struct MyPred
{
    int x;

    bool operator()(int i)
    {
        return (i == x);
    }
};
Run Code Online (Sandbox Code Playgroud)

(struct在这里使用简洁)

std::vector<int> v;

// fill v with ints

MyPred pred;
pred.x = 5;

std::vector<int>::iterator f 
     = std::find_if(v.begin(), 
                    v.end(), 
                    pred);
Run Code Online (Sandbox Code Playgroud)

编写这样的自定义类(带有"加载"代码!)至少可以说很麻烦,但是当添加lambda语法时,C++ 0x会有很多改进.

  • 没问题 - 显然最好将数据成员设为私有并提供构造函数来初始化它们,我只是简单地将`x`设为公开以使其更短并且希望更清晰. (2认同)