您是否遇到过需要将向量的内容复制并附加到自身的情况?如果是这样,您可能正在寻求一个优雅的解决方案,而不需要诉诸显式循环。
虽然 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中文网其他相关文章!