重点:
stack底层源码采用的是queue实现。

自定义模板采用vector实现(包括初始化列表和迭代器的实现)
-
- template<typename T>
- class Stack
- {
- private:
- vector
elems; -
- public:
- Stack() = default;
- ~Stack() = default;
- //初始化列表
- Stack(const initializer_list
& eles) - {
- for (const T& var : eles)
- {
- elems.emplace_back(var);
- }
- }
- //拷贝
- Stack(const Stack& s)
- {
- elems = s.elems;
- }
- //赋值
- Stack& operator=(const Stack& s)
- {
- if (this!=&s)
- {
- elems = s.elems;
- }
- return *this;
- }
- public:
- //出栈
- T pop();
- //入栈
- void push(const T& ele);
- //数量
- size_t size();
- //栈顶
- const T& top() const;
- //判空
- bool empty() const;
-
- public:
- //迭代器的实现,运用于for
- vector
::iterator begin() - {
- if (elems.empty())
- return elems.end();
- return elems.begin();
- };
- //迭代器的实现,运用于for
- vector
::iterator end() - {
- return elems.end();
- };
- };
-
- template<typename T>
- T Stack
::pop() - {
- assert(!elems.empty());
- T elem = elems.back();
- elems.pop_back();
- return elem;
- }
-
- template<typename T>
- void Stack
::push(const T& ele) - {
- elems.emplace_back(ele);
- }
-
- template<typename T>
- size_t Stack
::size() - {
- return elems.size();
- }
-
- template<typename T>
- const T& Stack
::top() const - {
- T elem = elems.back();
- return elem;
- }
-
- template<typename T>
- bool Stack
::empty() const - {
- return elems.empty();
- }
-
- int main()
- {
- Stack<int> s{1,2,3,4,5};
- cout << s.pop() << endl;
- s.push(10);
- for (const auto& var : s)
- {
- cout << var << endl;
- }
-
-
- size_t num = s.size();
- for (size_t i=0;i< num;++i)
- {
- cout << s.pop() << endl;
- }
-
- }
-
