【问题标题】:Query with STL set function使用 STL set 函数查询
【发布时间】:2018-04-04 13:49:25
【问题描述】:

我是 C++ STL 的新手。在下面的例子中

bool checkDuplicatesWithinK(int arr[], int n, int k)
{  
    set<int> myset;

    for (int i = 0; i < n; i++)
    {
        if (myset.find(arr[i]) != myset.end())
            return true;

        myset.insert(arr[i]);

        if (i >= k)
            myset.erase(arr[i-k]);
    }
    return false;
}

这里我无法理解下面一行

if (myset.find(arr[i]) != myset.end())
    return true;

myset.find(arr[i]) 正在检查该元素是否存在于集合中。但是为什么他们把条件不等于myset.end()? 我阅读了myset.end() 的描述,这将返回最后一个元素之后的元素的迭代器值。

【问题讨论】:

  • 查看find返回的内容
  • 如果集合中不存在该元素,std::set::find 会返回什么?
  • 如果未找到该项目,std::set::find 函数将返回 std::set::end 迭代器。只是为了避免疑虑。

标签: c++ set


【解决方案1】:

三个错误。 - 当调用返回表达式时,函数结束并且不会执行return之后的表达式。

  • 错误的参数传递给擦除

  • 做多余的工作

至于第三个,可以直接使用insert的返回值,也就是std::pair,可以检查第二个成员是否插入。

而且我认为你不需要检查插入是否成功。

你想要的尽在http://en.cppreference.com/w/cpp/container/set

【讨论】:

  • 虽然我指出了你的错误,但我仍然不知道你真正想要做什么,请编辑你的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 2018-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多