如果您想将列表中的元素“多次推送”到堆栈上,您基本上可以使用堆栈只是一个容器适配器这一事实:
#include <iostream>
#include <list>
#include <stack>
template <typename T>
class My_stack final : std::stack<T, std::list<T>> {
public:
using std::stack<T, std::list<T>>::stack;
using std::stack<T, std::list<T>>::push;
using std::stack<T, std::list<T>>::pop;
using std::stack<T, std::list<T>>::top;
using std::stack<T, std::list<T>>::empty;
using std::stack<T, std::list<T>>::swap;
using std::stack<T, std::list<T>>::size;
using std::stack<T, std::list<T>>::emplace;
using std::stack<T, std::list<T>>::operator =;
void push_elements(std::list<T>& l,
typename std::list<T>::const_iterator begin,
typename std::list<T>::const_iterator end)
{
this->c.splice(std::end(this->c), l, begin, end);
}
};
int main()
{
std::list l{ 1, 2, 3, 4, 5 };
My_stack<int> st{ l };
st.push_elements(l, std::begin(l), std::next(begin(l), 3));
std::cout << st.top() << ' ' << st.size() << '\n';
}
请注意,插入函数将元素从列表中移动到堆栈中,而不是复制它们,这应该是非常高效的。您可以根据deque 或vector 实现类似的功能,也可以使用此方案,任何适合您的需求。