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

标签 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 但将它与集合的结束迭代器进行比较的背后原因是什么?在这种情况下,不会通过将返回值列为

来实现相同的逻辑吗?
return find(c_rejectAddresses.begin(), c_rejectAddresses.end(), _addressToCheck) != NULL;

最佳答案

what is the reasoning behind comparing it with the set's end iterator?

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

Wouldn't the same logic in this case be implemented by listing the return value as

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

不,不会。这意味着 std::find() 返回一个指针,或者至少返回一个整数,其中 0 表示“未找到”。许多容器不是这种情况。 STL 算法使用迭代器,因此它们可以与容器无关。

关于c++ - 在此函数的返回值中使用迭代器的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46839984/

相关文章:

c++ - 无法使用opencv cuda调用

javascript - 如何通过来源获取图像?

python - 从 Eventlet GreenPile 对象中检索数据,可能与迭代器相关

python - 灵活的滑动窗口(Python)

python - 搜索图像的颜色。返回 X、Y

bash - For 循环获取 "find"命令的结果

c++ - Linux 应用程序中记录器的建议

c++ - 如何分配内存块并将其放入Cache?

c++ - 在GNU编译器中发现错误。更高版本?

c++ - 为什么取消引用字符串迭代器会产生 const char 引用?