在std::vector中查找项
Finding an item in std::vector
我想检查向量中是否存在元素,这样我就可以处理每种情况。我发现了这个公式:
#include <algorithm>
if ( std::find(vector.begin(), vector.end(), item) != vector.end() )
do_this();
else
do that();
我不明白为什么我们在末尾需要vector.end(),find(vector.begin(),vector.eend(),item)不足以找到元素吗?
std::find(vector.begin(), vector.end(), item)
将返回一个迭代器,因此通过将其与进行比较
vector.end()
您实际上是在检查是否存在这样一个具有该项的迭代器。
我不明白为什么我们最后需要vector.end(),不是吗find(vector.begin(),vector.end(),item)足以找到元素?
find
在找不到匹配时的结果是一个迭代器指向所提供范围的末尾,并且末尾迭代器没有什么特别之处,可以像布尔状态一样进行比较。
find
被设计成一种通用算法,适用于各种容器(甚至包括那些可能在标准库之外的容器)。它的设计目的不仅仅是返回元素是否被找到——如果找到了,它会返回一个指向该项的迭代器。因此,如果找不到元素,它就不会返回null或类似的内容。它返回迭代器。
如果你真的经常做这种事情(我只建议你这样做,因为你在日常代码中引入了一些外来的东西),你可以做这样的事情:
/// @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(),则表示它没有找到该项
有关详细信息,请参阅此。
相关文章:
- 查找 std::vector 中的最小值和最大值 std::p air
- 在 std::set 中查找 std::vector 的元素
- 查找索引数据结构,例如`sTD :: vector`(非数组)
- 使用 std::find 查找从二进制文件中读取的字符并转换为 std::vector 中的 std::string<string> 会产生这种不可预测的行为?
- 对于关键字查找,std::vector比std::map快
- C++ 在 Vector 中查找对象成员值
- 如何在std::vector中查找对象
- C++ 在 2D std::vector 中查找最大值的位置
- 如何在容器"std::vector<char>"查找单个单词
- 运行时在boost::mpl::vector中查找第一个匹配项
- 使用 std::find 在 std::vector 中查找 std::tuple
- 在Vector中查找元素对
- 如何在运行时在boost::fusion::vector中查找元素
- 如何在 std::vector 中查找项目的位置
- 查找语句中的"!=vector.end()"是什么意思?
- unique_ptr<int[]>、vector <int>和 int[] 的模板化类型查找
- 如何在 std::vector 中查找重复项<strings>并返回一个 std::list 它们按字母顺序排序,在该结果列表中没有重复项
- 在std::vector中查找项
- 在 vector<vector 中查找元素<string>>
- 在vector中查找value并返回对value的引用