リストint []内のアイテムを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;
}
関連する問題
- 1. C++ - オブジェクトをstdにプッシュする方法:: stack of std :: shared_ptr?
- 2. std :: stackを同時に処理する正しい方法
- 3. 'this'ポインタを 'std :: stack <_Ty>'から 'std :: stack <_Ty>&'
- 4. 「Stack smashing detected」をデバッグする方法は?
- 5. std :: stackオブジェクト上で移動
- 6. 配列の配列をstd :: sortで並べ替えるには?
- 7. std :: stackのポインタを正しく削除するには?
- 8. 配列に値をプッシュする方法
- 9. std :: stackの背後にあるコンテナを取得します。
- 10. 並列コードのベンチマーク方法は?
- 11. intを文字列に変換する方法並列配列
- 12. std :: stack要素の破棄順序
- 13. 文字列をスタックにプッシュする方法は?
- 14. std :: stackのこれらのコンストラクタはなぜ明示的に
- 15. std :: regex_token_iteratorをstd :: vectorにコピーする方法は?
- 16. junit TestSuiteを並列化する方法
- 17. groupByを並列化する方法
- 18. GNU並列のないbashで並列にタスクを実行する方法
- 19. サブブランチをブランチにプッシュする方法は?
- 20. ProcfileをHerokuにプッシュする方法は?
- 21. std :: move local stack variablesは可能ですか?
- 22. C++ 2011:std :: thread:ループを並列化する簡単な例?
- 23. OpenCVで並列処理を無効にする方法は?
- 24. Pythonマルチプロセッシング.Pool:並列にReasultsを結合する方法は?
- 25. Azure BLOBストレージにVHDを並列でアップロードする方法は?
- 26. スカラ並列コレクションの並行性を制御する方法
- 27. MEANでのログイン方法Stack
- 28. iOS:DetailViewにプッシュする方法
- 29. "struct * Stack stack"と "struct Stack * stack"の違いは何ですか?
- 30. のstd ::リスト<std::string> ::イテレータはstd ::文字列にする
を使用することができますか?マルチスレッドを使用したいのですか?または、すべての整数を一度にスタックにプッシュしたいだけですか? –
リストに要素を一度にプッシュする方法はありますか?ええ、私はいくつかのアイテムをすばやく押す方法を知りたいです。 (forループを使用する代わりに、私はparrallel呼び出しを行い、より速くプッシュすることができます) – user1730250
複数のスレッドを使用する場合は、複数の同時アクセスを防ぐためにmutexまたは他のロックを使用する必要があります。 – SoronelHaetir