【问题标题】:How to check/find if an item is in a DEQUE如何检查/查找项目是否在 DEQUE 中
【发布时间】:2012-01-19 17:21:07
【问题描述】:

在上面的代码中,else-if 部分给了我错误。 else-if 的意思是:else if x 的值不在双端队列中 then...

#include <iostream>
#include <ctime>
#include <stack>
#include <deque>
#include <algorithm>
deque<char> visited;
char x;

   if (x==target[4][4])
   {
           visited.push_back(x);            
           return (visited);
   }
   else if (!(find(visited.begin(), visited.end(), x)))
   {
       visited.push_back(x);
   }

错误:没有运算符“!”匹配这些操作数

【问题讨论】:

  • 它会给你什么错误? find() 如果没有找到返回visited.end(),顺便说一句不是NULL。

标签: c++ algorithm data-structures artificial-intelligence


【解决方案1】:

如果std::find找不到具体值,则返回迭代器对的“end”。

else if (std::find(visited.begin(), visited.end(), x) == visited.end())
{
   // process the case where 'x' _is_not_ found between
   // visited.begin() and visited.end()

编辑:如果您想知道 x is 是否在双端队列中,只需反转条件即可。

else if (std::find(visited.begin(), visited.end(), x) != visited.end())
{
   // process the case where 'x' _is_ found between
   // visited.begin() and visited.end()

编辑:如果您不熟悉 C++ 中的迭代器概念,请阅读Understanding Iterators in the STL

【讨论】:

  • @georgemano:不能。 .end() 指向双端队列后面的位置。
【解决方案2】:

对于那些访问此页面的人来说,他们只是知道如何在出队中检查/查找元素。 一个快速的解决方案如下:

使用std::find()方法:

numbers.push_back(10);
numbers.push_front(20);
numbers.push_back(30);
numbers.push_front(40);

deque<int>::iterator it = find(numbers.begin(), numbers.end(), 20);
if(it!=numbers.end())
{
    // Do your stuff. Here I am simply deleting the element
    it = numbers.erase(it); 
    // Note: Always save returned iterator from erase/insert method, otherwise
    // iterator will point to deleted resource, which leads to undefined behaviour.
}

希望这会对某人有所帮助。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    • 2015-10-02
    • 1970-01-01
    • 2018-02-25
    • 2022-01-05
    • 2019-07-26
    相关资源
    最近更新 更多