2012-01-19 14 views
5

En el código anterior, la parte else-if me da un error. El significado de los demás, si es: más si el valor de x no está en la deque entonces ...Cómo verificar/encontrar si un artículo está en un 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); 
    } 

ERROR: "!" Ningún operador coincide con estos operandos

+2

¿Qué error le da? find() devuelve visitado.end() si no se encuentra, no es NULL por cierto. –

Respuesta

16

Si std::find no puede encontrar el valor específico, devolverá el "final" del par de iteradores.

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() 

Editar: Si quieres saber si xes en el deque, simplemente revertir la condición.

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

Editar: Si no está familiarizado con el concepto de iterador en C++, por favor, lea Understanding Iterators in the STL.

+0

¿Qué sucede si x tiene el mismo valor que visitado.end() ??? –

+0

@georgemano: Simplemente use '! =' Si quiere saber si * x * ** es ** en la deque ... – kennytm

+6

@georgemano: No puede. '.end()' apunta a la ubicación después de la parte posterior de la deque. – kennytm

Cuestiones relacionadas