首頁 >後端開發 >C++ >如何有效地複製向量並將其附加到自身?

如何有效地複製向量並將其附加到自身?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-07 01:53:13701瀏覽

How to Efficiently Duplicate and Append a Vector to Itself?

高效的向量自追加

您是否遇到過需要將向量的內容複製並附加到自身的情況?如果是這樣,您可能正在尋求一個優雅的解決方案,而不需要訴諸顯式循環。

雖然 std::vector::insert 似乎是合適的候選者,但如果與 *this 一起使用,迭代版本會表現出未定義的行為迭代器。此外,單獨使用 std::copy 可能會導致分段錯誤。

不要怕!有一個簡單而有效的方法,涉及兩個步驟:

  1. 調整大小:擴展向量的容量以容納重複的元素。為此,您可以使用調整大小或保留。
  2. 複製:使用 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::back_inserter:

auto old_count = xx.size();
xx.reserve(2 * old_count);
std::copy_n(xx.begin(), old_count, std::back_inserter(xx));

請注意,使用保留時,std::copy_n 是必需的,因為end() 指向向量末尾的一個,使其作為插入點無效。

上述解決方案確保產生的向量包含複製並附加到自身的原始元素,保留現有元素的完整性並最大限度地減少重新分配操作。

以上是如何有效地複製向量並將其附加到自身?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn