检查元素是否是堆栈的一部分

时间:2013-07-07 14:41:30

标签: c++ stack

我需要检查元素是否是堆栈的一部分。这是我写的函数:

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 个答案:

答案 0 :(得分:0)

  

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

我担心stack interface没有支持检查任意元素的函数。

  

元素反转就像它们在第二个堆栈中输入一样

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

答案 1 :(得分:0)

如果您想将此视为pure堆栈,则没有其他方法可以执行此操作。您可以看到std::stack没有为您提供任何界面来检查stack中的任意元素。

如果不是这种情况,那么您不希望像std::vector这样的内容对随机访问容器元素更有意义。