0

要素がスタックの一部であるかどうかを確認する必要があります。ここに私が書いた関数があります:

template<class T>
    bool CheckElem(Stack<T>& A, T x)
      {
        Stack<T> B;
        bool check = false;
        while(!A.Empty())
          {
            if(A.Top() == x) check = true;
            B.Push(A.Top());
            A.Pop();               
          }
        A = B;
        if(check) return true;
        return false;
      } 

ご覧のとおり、たとえばスタックの最後の要素をチェックできるようにするには、スタックのすべての要素をポップする必要があります。また、要素を別のスタックに保存しているので、データが失われることはありません。しかし、要素は2番目のスタックに入力されたように反転され、実際にはリンクされたリストのようなものになっています. 私の質問は、スタックの要素をポップして別の場所に保存する必要なく、要素がスタックにあるかどうかを確認する別の方法があるかどうかです。

4

2 に答える 2

0

これをスタックとして扱いたい場合、これpureを行う方法は他にありません。std::stackでは、 の任意の要素を調べるためのインターフェイスが提供されていないことがわかりますstack

そうでない場合は、コンテナの要素へのランダムアクセスにもっと意味のあるstackものは必要ありません。std::vector

于 2013-07-07T14:50:44.930 に答える
0

私の質問は、要素がスタックにあるかどうかを確認する別の方法があるかどうかです

スタック インターフェイスには、任意の要素の検査をサポートする機能はありません。

要素は、2 番目のスタックに入力されたように反転されます

これを修正する方法は、2 番目のスタックからすべてをポップして、元のスタックにプッシュすることです。

于 2013-07-07T14:47:31.697 に答える