我正在寻找一个解析本地地址的函数,并且对返回值选择背后的理由感到困惑。功能是
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;
答案 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);
可能不是最有用的例子。但是,如果需要,从迭代器获取值比从值获取迭代器更容易。