如何检查/查找一个元素是否在DEQUE中

10

在上面的代码中,else-if部分给我报错了。 else-if 的意思是:如果 x 的值不在 deque 中,则...

#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);
   }

错误:没有匹配这些操作数的运算符 "!"。


2
它给你什么错误?如果未找到,则find()返回visited.end(),而不是NULL。 - Joachim Isaksson
2个回答

23
如果 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是否在deque中,请反转条件。
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++中的迭代器概念,请阅读理解STL中的迭代器


6
无法。.end()指向双端队列末尾之后的位置。 - kennytm

9

如果你访问这个页面只是为了了解如何检查/查找双端队列中的元素,下面是一个快速解决方案:

使用 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.
}

希望这能帮助到某些人。 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接