2012-01-19 10 views
5

W powyższym kodzie część else-if daje mi błąd. Znaczenie else-if jest: indziej, jeżeli wartość X nie jest w deque następnie ...Jak sprawdzić/znaleźć, czy dana pozycja jest w 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: "!" Żaden operator pasuje do tych argumentów

+2

Jaki błąd to daje? find() zwraca visited.end(), jeśli nie znaleziono, nie NULL btw. –

Odpowiedz

16

Jeśli std::find nie może znaleźć konkretnej wartości, zwróci "koniec" pary iteratorów.

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: Jeśli chcesz wiedzieć, czy xjest w deque, po prostu odwrócić ten stan.

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

Edycja: Jeśli nie jesteś zaznajomiony z koncepcją iteracyjnej w C++, proszę przeczytać Understanding Iterators in the STL.

+0

Co się stanie, jeśli x ma taką samą wartość jak visited.end() ??? –

+0

@georgemano: Po prostu użyj '! =', Jeśli chcesz wiedzieć, czy * x * ** jest ** w deque ... – kennytm

+6

@georgemano: Nie można. '.end()' wskazuje na lokalizację za plecami deque. – kennytm

Powiązane problemy