Finding an item in std::vector
我想检查向量中是否存在元素,这样我就可以处理每种情况。我遇到了这个公式:
1 2 3 4 5 6 | #include if ( std::find(vector.begin(), vector.end(), item) != vector.end() ) do_this(); else do that(); |
我不明白为什么我们在末尾需要vector.end(),找不到足够的(vector.begin(),vector.end(),item)来找到元素?
1 | std::find(vector.begin(), vector.end(), item) |
将返回迭代器,因此通过将其与
1 | vector.end() |
您实际上正在检查是否存在具有该项的此类迭代器。
I dont understand why do we need vector.end() at the end, isnt
find(vector.begin(), vector.end(), item) enough to find the element ?
找不到匹配的
如果你真的经常做这种事情(我只建议你这样做,因为你在日常代码中引入了一些外来的东西),你可以这样做:
1 2 3 4 5 6 7 8 9 10 11 12 | /// @return True if `val` is found in `[first, last)` template <class Iterator, class Element> bool contains(Iterator first, Iterator last, const Element& val) { return std::find(first, last, val) != last; } ... if (contains(vector.begin(), vector.end(), item)) do_this(); else do_that(); |
它检查值是否被实际找到。std::find()将迭代器返回到查询范围中的第一个元素。如果返回的值等于vector.end(),则表示它找不到该项。有关详细信息,请参阅此。