私は、ベクトルの内容全体をC++のキューにコピーしようとしています。これは組み込み関数ですか、それとも各要素をループするのは自然でしょうか?ベクトル全体をどのようにしてキューにコピーできますか?
答えて
あなたは新しいキューを作成する場合は、コンストラクタを使用することができますすでにキュー場合
std::vector<int> v = get_vector();
std::queue<long int, std::deque<long int>> q(std::deque<long int>(v.begin(),
v.end()));
(deque
はおそらく最高ですが、あなたは、味に根本的なコンテナを変更することができます。)
を存在している、何の範囲ベースのアルゴリズムはありません、しかし、あなたは簡単に独自のを書くことができます:余談として
template <typename Iter, typename Q>
push_range(Q & q, Iter begin, Iter end)
{
for (; begin != end; ++begin)
q.push(*begin);
}
:あなたのアルゴリズムはflexibiの量を必要とする場合あなたはおそらく最初にstd::deque
を使用したほうがよいでしょう。コンテナアダプタ(queue
とstack
)は、「これは必要な動作です」(プッシュ/ポップ)と明示的に言う場合にのみ使用してください。
OPは 'deque'ではなく' queue'について尋ねています。 –
一般的なアルゴリズムでは、コードを3行長くしても、高価なコピーを潜在的に(この場合はIter :: value_typeに依存して)避けるので、常に++開始から 'begin ++ 'を優先します。 –
@BjörnPollex:いいえ、同じ行数:-)もう一度おねがいします! –
次のようにキューのコンストラクタは次のとおりです。
explicit queue (const Container& ctnr = Container());
だから、あなたには、いくつかのベクトルvを持って、それからキューを構築することができます。
vector<int> v;
deque<int> d;
/* some random magic code goes here */
queue<int, deque<int>> q(d(v));
ただし、既に初期化されたqのpush_back要素にはこれを実行できません。別のコンテナを使用し、キューを空にし、そのコンテナにベクターを追加し、そのベクトルから新しいキューを作成することができます。しかし、私はそれをすべてやっているのではなく、繰り返します。
最終回答:いいえ、キューに実装されているメソッドはありません。ベクターをデクエートまたは反復処理することができます。
おそらく最も良い方法は、要素をキューに直接プッシュすることです。あなたは、アダプタ(Insert into an STL queue using std::copy)でキューをラップする必要があるため
でもSTDを使用してstd::vector<T> v;
...
std::queue<T> q;
for (const auto& e: v)
q.push(e)
::コピーが面倒です。
真実ですが、何が必要なのかによって異なります。私はベクトルを与えられた状況を持っていたので、それを待ち行列に入れたいと思っていました(実際に要素を削除せずにpopメソッドが必要でした)。また、私は要素をコピーしたくない(ミリ秒ごとに)。このような状況では、引数として与えられたベクトルをとる独自の単純なキューを単純に実装するほうがはるかに簡単です。残りは自明です。 –
- 1. ディスプレイ全体をどのようにミラーリングできますか?
- 2. 画面全体をどのようにフラッシュできますか?
- 3. どのようにしてレルム全体をクローンできますか?
- 4. キュー全体をコピーしていますか?<T>演算子「=」スレッドセーフ(C#)
- 5. 体全体をどのように埋めるのですか?
- 6. Androidデバイスでユーザーのアクティビティシステム全体をどのようにシミュレートできますか?
- 7. githubからリポジトリ全体をどのように取得できますか?
- 8. Eclipse 3.4(Ganymede)でソースツリー全体をどのようにフォーマットできますか?
- 9. どのようにしてループなしでベクトルを乗算できますか?
- 10. Oracle 11gのスキーマでHRスキーマ全体をコピーできますか?
- 11. iPhone Reachability - アプリ全体でどのように使用できますか?
- 12. Falcorでどのように範囲全体を無効にしますか?
- 13. テーブル全体をどのように伸ばすのですか?
- 14. プログラム全体をどのようにループするのですか?
- 15. Excel Rangeが行全体または列全体を表すかどうかをVBAでどのように確認できますか?
- 16. 私はどのようにしてfloat.TryParseを行全体の部分文字列にできますか?
- 17. C++:ポインタのベクトルを完全にコピー
- 18. どのようにして__m128変数に複素数全体を入れることができますか?
- 19. Ruby on Rails:ssl_required:アプリ全体でどのように有効にしますか?
- 20. アンドロイドで現在のビュー全体をどのように参照しますか?
- 21. 条件文に基づいて全体をコピーします
- 22. どのように各結果をベクトルとして表示できますか?
- 23. Rデータフレーム全体でどのように表を作成しますか?
- 24. Railsアプリケーション全体をコピー&ペーストできますか?
- 25. ディレクトリ全体をコンテナからホストにコピー
- 26. フォーム全体でどのテキストフィールドが空であるかをどのように確認できますか?
- 27. VBAで列全体にテキストをコピー
- 28. 構造体のベクトルを持つ構造体のベクトルのベクトルを構築できますか? (はい、実際に)
- 29. ペアの空のベクトルを別のベクトルにどのように戻しますか?
- 30. どのように行列を固有ベクトルでベクトル化しますか?
関連する質問を参照してください:http://stackoverflow.com/questions/1723515/insert-into-an-stl-queue-using-stdcopy – yairchu
'std :: vector'と' std :: queue '?もしそうでなければ 'std :: deque'を使います。 –