从std :: find_if这样的方法返回的迭代器与常规迭代器不匹配

Eit*_*tan 0 c++ stl set

我有这个std :: find_if()方法返回找到的迭代器(匹配"条件"仿函数).

template<class T, class Function>
typename std::set<T>::iterator setFindIf(set<T> set, Function condition) {
    typename std::set<T>::iterator iterator = set.begin();
    for (; iterator != set.end(); iterator++) {
        cout<<"U";
        if (condition(*iterator)) {
            break;
        }
    }
    return iterator;
}
Run Code Online (Sandbox Code Playgroud)

这条线称之为:

std::set<Order>::iterator it = setFindIf(orders, orderCustomerHasOpenOrder(id, ordNum));
Run Code Online (Sandbox Code Playgroud)

我正在测试一个空集,所以这一行(在上面的行之后)应该打印'1':

cout<<(it==orders.end());
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用?当我在setFindIf()方法的末尾添加这一行时,它会按预期打印"1".

Ben*_*ley 8

你按价值取得了你的收入.所以它是您传入的容器的副本.比较这些迭代器是未定义的行为,因为它们属于不同的容器.改为通过引用传递集合.