您是否遇到過需要將向量的內容複製並附加到自身的情況?如果是這樣,您可能正在尋求一個優雅的解決方案,而不需要訴諸顯式循環。
雖然 std::vector::insert 似乎是合適的候選者,但如果與 *this 一起使用,迭代版本會表現出未定義的行為迭代器。此外,單獨使用 std::copy 可能會導致分段錯誤。
不要怕!有一個簡單而有效的方法,涉及兩個步驟:
這是使用調整大小的範例:
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中文網其他相關文章!