向堆栈容器添加更多功能

时间:2015-06-22 07:56:35

标签: c++ visual-c++ stl

我正在使用STL堆栈容器的默认功能(push,pop,top,empty,size)。如果我想添加更多功能,比如从堆栈中间访问元素。

我怎么能这样做?

由于

1 个答案:

答案 0 :(得分: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;
}