将向量附加到自身的优雅解决方案
复制向量的内容并将其附加到原始向量是一种常见的操作。然而,在没有循环的情况下有效实现这一点可能具有挑战性。
挑战讨论
这个问题突出了 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 时,std::copy_n 是必需的,因为 end() 迭代器指向超过向量末尾的一个元素。这使得它对于插入无效。
结论
该解决方案提供了一种简洁有效的方法来将向量的内容附加到自身,而无需诉诸基于循环的方法执行。通过利用 resize 和 copy_n 操作,您可以以最小的代码开销实现所需的功能。
以上是如何在没有循环的情况下有效地将向量附加到自身?的详细内容。更多信息请关注PHP中文网其他相关文章!