将列表int []中的推送项并行获取到std :: stack的简单方法是什么?
答案 0 :(得分:1)
如果要将列表中的“多推”元素放到堆栈中,基本上可以使用堆栈只是容器适配器的事实:
#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
的类似功能,以满足您的需求。
答案 1 :(得分:1)
不确定您是否认为这是一个循环,但您可以使用std::for_each
和lambda
#include <algorithm>
#include <stack>
int main()
{
std::stack<int> s;
int list[5] = { 1,2,3,4,5 };
std::for_each(std::begin(list), std::end(list), [&s](int i) { s.push(i); });
return 0;
}