ホームページ > バックエンド開発 > C++ > ループを使用せずにベクトルをそれ自体に効率的に追加するにはどうすればよいですか?

ループを使用せずにベクトルをそれ自体に効率的に追加するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-09 01:23:02
オリジナル
578 人が閲覧しました

How to Efficiently Append a Vector to Itself Without a Loop?

ベクトルをそれ自体に追加するためのエレガントなソリューション

ベクトルの内容を複製して元のベクトルに追加するのは一般的な操作です。ただし、ループを使用せずにこれを効率的に実装するのは難しい場合があります。

チャレンジ ディスカッション

この質問は、std::vector::insert と std::copy の制限を強調しています。この特定のタスクのために。 std::vector::insert は現在のベクトルを参照するための反復子の使用を禁止し、std::copy はこのコンテキストで使用されるとセグメンテーション違反をトリガーします。

最適な解決策

最適な解決策には、std::vector::resize (または std::vector::reserve) とstd::copy_n。次のコードは、このアプローチを示しています。

auto old_count = xx.size();
xx.resize(2 * old_count);
std::copy_n(xx.begin(), old_count, xx.begin() + old_count);
ログイン後にコピー

または、std::vector::reserve および std::back_inserter:

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

説明

std::vector::resize は、ベクトルを再割り当てします。新しいサイズが古い容量を超えています。 std::copy_n は、ベクトルの先頭から指定された数の要素を新しい場所にコピーします。

std::vector::reserve を使用する場合、end() イテレータがポイントするため、std::copy_n が必要です。ベクトルの末尾を 1 つ越えた要素。これにより、挿入が無効になります。

結論

このソリューションは、ループベースのメソッドに頼ることなく、ベクトルの内容をそれ自体に追加するための簡潔で効率的な方法を提供します。実装。サイズ変更操作と copy_n 操作を利用すると、最小限のコード オーバーヘッドで目的の機能を実現できます。

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

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