Как проверить / найти предмет в DEQUE - PullRequest
9 голосов
/ 19 января 2012

В приведенном выше коде часть else-if выдает ошибку. Значение else-if: else, если значение 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 ]

19 голосов
/ 19 января 2012

Если std::find не может найти конкретное значение, он вернет «конец» пары итераторов.

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 в деке, просто измените условие.

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 .

2 голосов
/ 28 мая 2018

Для тех, кто посетил эту страницу, чтобы просто знать, как проверить / найти элементы в очереди.Быстрое решение приведено ниже:

Используйте 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.
}

Надеюсь, это кому-нибудь поможет:)

...