首页 >后端开发 >C++ >如何有效地复制向量并将其附加到自身?

如何有效地复制向量并将其附加到自身?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-07 01:53:13755浏览

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