【问题标题】:working of find(vector.begin(),vector.end(), A[i])==vector.end()find(vector.begin(),vector.end(), A[i])==vector.end() 的工作
【发布时间】:2021-01-29 17:41:24
【问题描述】:
if(find(vector.begin(),vector.end(), A[i])==vector.end())
{
    vector.push_back(A[i]);
}

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

【问题讨论】:

  • 理解它为什么起作用的关键在于理解std::find的返回值。
  • 如果您向edit 这个问题详细说明您了解什么,以及具体不了解什么,您会受益匪浅。否则,我们必须猜测您不了解的内容。如果语句?平等比较? find? push_back?

标签: c++ vector stl find


【解决方案1】:

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

保存不能重复的值列表的更简单方法是使用std::setstd::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
}
...

【讨论】:

    猜你喜欢
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-17
    相关资源
    最近更新 更多