int [] 목록에서 push 항목을 std :: stack에 병렬로 얻는 간단한 방법은 무엇입니까? 당신은 스택에 목록에서 "멀티 푸시"요소, 당신은 기본적으로 스택은 단지 컨테이너 어댑터는 사실 사용하려면병렬로 std :: stack을 푸시하는 방법은 무엇입니까?
-2
A
답변
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
확실하지이 루프이라고 생각하지만 "병렬"무엇을 의미합니까 당신이 std::for_each
및 람다
#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;
}
를 사용할 수 있는지? 멀티 스레딩을 사용 하시겠습니까? 아니면 단순히 모든 정수를 스택에 밀어 넣기를 원하십니까? –
한 번에 목록에서 요소를 푸시 할 수있는 방법이 있습니까? 네, 여러 항목을 빨리 푸는 방법을 알고 싶습니다. (for 루프를 사용하는 대신 parrallel 호출을 수행하고 더 빨리 푸시 할 수 있음) – user1730250
다중 스레드를 사용하는 경우 다중 동시 액세스를 방지하기 위해 뮤텍스 또는 다른 잠금을 사용해야합니다. – SoronelHaetir