首页 > 解决方案 > find(vector.begin(),vector.end(), A[i])==vector.end() 的工作

问题描述

if(find(vector.begin(),vector.end(), A[i])==vector.end())
{
    vector.push_back(A[i]);
}

我使用它来不在向量中输入重复的元素。它实际上是如何工作的。如果有人可以解释,那就太好了。

标签: c++vectorstlfind

解决方案


std::find()将一系列迭代器作为输入并在该范围内搜索给定值。如果找到该值,则返回该值的迭代器。如果未找到该值,则返回指定的结束迭代器。在这种情况下,因为vector.end()是指定的结束迭代器,如果A[i]vector.

保留不能重复的值列表的更简单方法是使用std::setorstd::unordered_set代替std::vector,例如:

#include <set>

std::set<decltype(A)::value_type> s;
...
if (s.insert(A[i]).second) {
    // insert successful, was not a duplicate
}
else {
    // insert failed, was a duplicate
}
...

推荐阅读