我正在查看一个通过本地地址进行解析的函数,并且对返回值选择背后的基本原理感到困惑。函数是
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/