在此函数的返回值中使用迭代器的目的是什么?

时间:2017-10-19 22:47:37

标签: c++ iterator find

我正在寻找一个解析本地地址的函数,并且对返回值选择背后的理由感到困惑。功能是

bool p2p::isLocalHostAddress(bi::address const& _addressToCheck)
{
    // @todo: ivp6 link-local adresses (macos), ex: fe80::1%lo0
    static const set<bi::address> c_rejectAddresses = {
        {bi::address_v4::from_string("127.0.0.1")},
        {bi::address_v4::from_string("0.0.0.0")},
        {bi::address_v6::from_string("::1")},
        {bi::address_v6::from_string("::")}
    };

    return find(c_rejectAddresses.begin(), c_rejectAddresses.end(), _addressToCheck) != c_rejectAddresses.end();
}

我理解返回值的实际代码,其中std :: find遍历查找_addressToCheck的集合,但是将它与set的end迭代器进行比较的原因是什么?在这种情况下,通过将返回值列为

,是否可以实现相同的逻辑
return find(c_rejectAddresses.begin(), c_rejectAddresses.end(), _addressToCheck) != NULL;

2 个答案:

答案 0 :(得分:3)

  

将它与set的end迭代器进行比较的原因是什么?

std::find()将两个迭代器作为输入,从第一个迭代器搜索到但不包括第二个迭代器。如果找到该项,则返回该项的迭代器。如果找不到该项,则返回第二个迭代器。由于==作为第二个迭代器传入,因此必须将返回值与end()进行比较,以了解是否找到了地址。

  

在这种情况下,通过将返回值列为

,不会实现相同的逻辑
end()
不,它不会。这意味着return find(c_rejectAddresses.begin(), c_rejectAddresses.end(), _addressToCheck) != NULL; 返回一个指针,或者至少是一个整数,其中0表示“未找到”。许多容器的情况并非如此。 STL算法使用迭代器,因此它们可以与容器无关。

答案 1 :(得分:0)

它使返回值与其他算法函数兼容,这意味着它们可以相互嵌入。

DefaultListModel model=new DefaultListModel();
        model.clear();
     jList1.setModel(model);

可能不是最有用的例子。但是,如果需要,从迭代器获取值比从值获取迭代器更容易。