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;
      } 

就像您看到的那样,我需要弹出堆栈的所有元素才能检查例如堆栈的最后一个元素。而且我将元素保存在另一个堆栈中,所以我不会丢失我的数据。但是这些元素被颠倒了,就像它们被输入到第二个堆栈中一样,实际上它正在变成一个类似于链表的东西。我的问题是是否有另一种方法来检查元素是否在堆栈中,而无需弹出并将堆栈的元素保存在另一个地方。

4

2 回答 2

0

If you want to treat this as a pure stack then there is no other way to do this. You can see that std::stack does not provide you with any interface to examine arbitrary elements in the stack.

If this is not the case then, you don't want a stack something like std::vector makes more sense for random access to elements of the container.

于 2013-07-07T14:50:44.930 回答
0

我的问题是是否有另一种方法来检查元素是否在堆栈中

恐怕堆栈接口没有支持检查任意元素的功能。

元素被反转,就像它们进入第二个堆栈一样

解决此问题的方法是将所有内容从第二个堆栈中弹出并将它们推回原始堆栈。

于 2013-07-07T14:47:31.697 回答