2012-01-19 9 views
5

上記のコードでは、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); 
    } 

ERROR: "!" なしオペレーターこれらのオペランドに一致します

+2

どのようなエラーが表示されますか? find()はNULLが見つからない場合にvisited.end()を返します。btw。 –

答えて

16

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++でのイテレータのコンセプトに慣れていない場合は、Understanding Iterators in the STLをお読みください。

+0

xの値がvisited.end()と同じ場合はどうなりますか? –

+0

@georgemano:* x * **が両端キューにあるかどうかを知りたければ '!='を使用してください。 – kennytm

+6

@georgemano:それはできません。 '.end()'は両端キューの後ろの位置を指します。 – kennytm

関連する問題