2015-06-22 43 views
-3

我正在使用STL堆棧容器的默認功能(push,pop,top,empty,size)。如果我想添加更多功能,例如從堆棧中訪問元素。爲堆棧容器添加更多功能

我該怎麼做?

感謝

+6

你不知道。這不是一個堆棧。如果你想要一個更強大的容器,使用不同的容器。像'std :: vector'。 –

+0

有人可能選擇使用堆棧的原因之一是它暗示需要一些特定的操作,給讀者提供一些可能使用的算法的提示。它也意味着切換到堆棧的另一個實現的能力(例如,查看它執行得更好還是使用更少的內存)。如果你有某種超出預期界面的「功耗堆棧」,那麼你已經使這兩個影響無效,並會混淆代碼的評論者/維護者。 –

+0

堆棧默認使用deques來實現它,但只提供5個要使用的功能。我可以爲堆棧製作通用容器嗎? –

回答

1

如果這是面試問題什麼的,你必須反正做到這一點,你可以做到這一點像,下面的代碼。來自std::stac,並且過載operator[]

#include <iostream> 
#include <algorithm> 
#include <stack> 
#include <exception> 
#include <stdexcept> 

template <typename T> 
class myStack:public std::stack<T> 
{ 
    public: 
     T operator[](long index) 
     { 
      std::stack<T> temp; 
      T tempVal; 
      for(long i=0;i<index;++i) 
      { 
       if(this->template empty()) 
        throw std::out_of_range("Index out of range"); 
       tempVal = this->template top(); 
       temp.push(tempVal); 
       this->template pop(); 
      } 

      //T retVal = this->template top(); 
      while(!temp.empty()) 
      { 
       T tempVal = temp.top(); 
       this->template push(tempVal); 
       temp.pop(); 
      } 

      return tempVal; 
     } 
}; 

int main(void) 
{ 
    myStack<int> st; 

    st.push(5); 
    st.push(1); 
    st.push(7); 
    st.push(9); 
    st.push(4); 

    std::cout<<"3rd Element :"<<st[3]<<std::endl; 
    return 0; 
} 
+0

如果這不是面試問題? – sehe

+0

如果它的真實世界的問題,我會建議不要使用隨機訪問堆棧或東西,而是使用向量。 –