ホームページ > バックエンド開発 > C++ > ループを使用せずにベクター コンテンツを効率的に複製および追加するにはどうすればよいでしょうか?

ループを使用せずにベクター コンテンツを効率的に複製および追加するにはどうすればよいでしょうか?

Patricia Arquette
リリース: 2024-11-28 00:52:12
オリジナル
660 人が閲覧しました

How Can You Efficiently Duplicate and Append Vector Contents Without Using Loops?

ベクターの内容を効果的に複製して追加する

ベクターを操作する場合、多くの場合、要素を複製して、それらをコンテンツの末尾に追加する必要があります。元のベクトル。これは、ループを使用しないと難しい場合があります。

反復ソリューションの課題

反復子がベクターは挿入中に無効になる可能性があります。

サイズ変更とCopy_n

より洗練された解決策には、次の 2 つの手順が含まれます。

  1. ベクトルのサイズを変更します。 ベクトルにメモリを割り当てるには、resize() またはreserve() を使用します。要素が重複しています。
  2. 要素のコピー: を使用しますstd::copy_n() を使用して、元の要素を重複した場所にコピーします。

次に 2 つの実装例を示します。

// Using resize() and copy_n()
auto old_count = xx.size();
xx.resize(2 * old_count);
std::copy_n(xx.begin(), old_count, xx.begin() + old_count);

// Using reserve() and copy_n() via back_inserter()
auto old_count = xx.size();
xx.reserve(2 * old_count);
std::copy_n(xx.begin(), old_count, std::back_inserter(xx));
ログイン後にコピー

どちらの場合も、元のベクトルのサイズは 2 倍になります。重複に対応するために、copy_n() 操作を使用して要素を転送します。再割り当て後、end() イテレータはベクトルの末尾を超えてポイントするため、サイズを変更したり、copy_n() でreserve() を使用したりする前に、元のベクトルのサイズを覚えておくことが重要です。

以上がループを使用せずにベクター コンテンツを効率的に複製および追加するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート