ホームページ  >  記事  >  バックエンド開発  >  C で 1 つのベクトルを別のベクトルに効率的に追加するにはどうすればよいですか?

C で 1 つのベクトルを別のベクトルに効率的に追加するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-20 20:13:16308ブラウズ

How Can I Efficiently Append One Vector to Another in C  ?

ベクトルを簡単に追加

ベクトル操作の世界では、あるベクトルを別のベクトルの末尾に追加する必要がよくあります。要素を反復処理して個別に挿入するのは明白なアプローチのように思えるかもしれませんが、ここではより効率的で洗練されたソリューションを提供します。

次のコード スニペットを考えてみましょう:

vector<int> a;
vector<int> b;

両方のベクトルに約 30 個の要素があると仮定すると、ベクトル b の内容をベクトル a の最後に追加するにはどうすればよいでしょうか?

ブルートフォースこの方法では、vector::push_back() を使用して b の各要素を a に追加します。ただし、このアプローチは退屈で計算効率が低い可能性があります。

代わりに、より効率的な方法を紹介します:

a.insert(a.end(), b.begin(), b.end());

代わりに、C 11 以降の場合は、次のバリアントを検討してください:

a.insert(std::end(a), std::begin(b), std::end(b));

これらのメソッドは、次の 3 つの引数を取る std::insert() 関数を利用します。挿入ポイントへの反復子、ソース範囲の先頭への反復子、ソース範囲の末尾への反復子です。適切なイテレータを提供することで、ベクトル b の内容をベクトル a にシームレスに追加できます。

コード スニペットの 2 番目のバリアントでは汎用イテレータが使用されており、配列 b にも適用できます。ただし、このアプローチには C 11 以降が必要です。

ユーザー定義型の場合、引数依存ルックアップ (ADL) を利用してコードをさらに簡略化できます。

using std::begin, std::end;
a.insert(end(a), begin(b), end(b));

これらのエレガントなメソッドを使用すると、ソリューションを使用すると、ベクターの追加が楽な作業になり、コードの効率と保守性が大幅に向上します。

以上がC で 1 つのベクトルを別のベクトルに効率的に追加するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。