指针和方法的奇怪用法

时间:2013-01-07 09:10:08

标签: c++ pointers methods

if (mySharedState -> liveIPs -> find(flowStats -> destinationIP) != mySharedState -> liveIPs -> end() ){
     //do something
}

unordered_map <uint32_t, std::string> *liveIPs;

我从未见过这样的用法(使用查找(...)结束())。有人可以帮我回复一下吗? (顺便说一句,这是c ++代码)

2 个答案:

答案 0 :(得分:4)

您可以使用此技术检查容器是否包含该值。

find()返回与该值对应的迭代器,end()返回容器末尾的迭代器1,用于表示“未找到值”。

答案 1 :(得分:1)

函数find(value)和end()是名为“containers”的类的成员函数,用于存储各种类型的元素(list,set,vector,map ...)。有关容器here的更多信息。

两个成员函数都返回一个迭代器(一种指针)到容器元素。您可以阅读有关迭代器here的信息。

抽象地说,find(value)将为您提供容器中元素的位置,该容器等于该值。而end()将返回一个指向容器末尾的迭代器(最后一个元素后面的位置)。

所以在你的情况下:

// from mSharedState get liveIPs (a container storing IPs)
// and find the element with value destinationIP
mSharedState->liveIPs->find(flowStats->destinationIP) 

// check if the iterator returned by find(flowStats->destinationIP) is different
// then the end of the liveIPs contatiner
!= liveIPs->end()

因此,如果容器liveIPs持有值为destinationIP的元素,则将执行“// do something”。

由于find(value)和end()通常是容器的成员函数,我认为您显示的代码片段是STL符合容器的成员函数定义的一部分(可能是某些用户定义的容器)符合STL容器接口,提供find(value)和end()作为成员函数)。