2012-01-19 17 views
5

Nel codice sopra la parte else-if mi dà errore. Il significato di altro, se è: altrimenti se il valore di x non è nella deque poi ...Come verificare/trovare se un elemento è in 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); 
    } 

ERRORE: "!" Nessun operatore corrisponde a questi operandi

+2

Che errore ti dà? find() restituisce visited.end() se non trovato, non NULL btw. –

risposta

16

Se std::find non riesce a trovare il valore specifico, restituirà la "fine" della coppia iteratore.

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

Edit: Se vuoi sapere se xè nel deque, basta invertire la condizione.

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

Edit: Se non si ha familiarità con il concetto iteratore in C++, si prega di leggere Understanding Iterators in the STL.

+0

Cosa succede se x ha lo stesso valore di visited.end() ??? –

+0

@georgemano: usa '! =' Se vuoi sapere se * x * ** è ** nel deque ... – kennytm

+6

@georgemano: Non può. '.end()' punta alla posizione dopo il retro del deque. – kennytm

Problemi correlati