0

我有这个类似于 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;
}

这条线调用它:

std::set<Order>::iterator it = setFindIf(orders, orderCustomerHasOpenOrder(id, ordNum));

我在一个空集上进行测试,所以这一行(紧跟在上一行之后)应该打印“1”:

cout<<(it==orders.end());

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

4

1 回答 1

8

您正在按价值进行设置。所以它是您传入的容器的副本。比较这些迭代器是未定义的行为,因为它们属于不同的容器。而是通过引用传递集合。

于 2013-06-18T14:08:57.697 回答