首页 > 后端开发 > C++ > 正文

如何在没有循环的情况下有效地将向量附加到自身?

Barbara Streisand
发布: 2024-11-09 01:23:02
原创
524 人浏览过

How to Efficiently Append a Vector to Itself Without a Loop?

将向量附加到自身的优雅解决方案

复制向量的内容并将其附加到原始向量是一种常见的操作。然而,在没有循环的情况下有效实现这一点可能具有挑战性。

挑战讨论

这个问题突出了 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板