当前位置:首页 » 《关注互联网》 » 正文

C++中如何高效拼接两个vector

11 人参与  2024年10月03日 13:21  分类 : 《关注互联网》  评论

点击全文阅读


在C++编程中,vector是一种常用的数据结构,它代表了一个可以动态改变大小的数组。在实际开发中,经常需要将两个vector拼接在一起,形成一个新的vector。本文将详细介绍如何在C++中拼接两个vector,并探讨不同方法的性能差异。

一、使用insert成员函数

C++ STL中的vector提供了insert成员函数,可以用来在指定位置前插入另一个容器的全部或部分元素。这是拼接两个vector的一种直观方法。

示例代码

#include <iostream>#include <vector>int main() {    std::vector<int> vec1 = {1, 2, 3};    std::vector<int> vec2 = {4, 5, 6};    // 在vec1的末尾插入vec2的所有元素    vec1.insert(vec1.end(), vec2.begin(), vec2.end());    // 输出结果    for (int num : vec1) {        std::cout << num << " ";    }    std::cout << std::endl;    return 0;}

输出

1 2 3 4 5 6

性能分析

使用insert函数进行拼接时,如果vector需要扩展容量,可能会导致内存重新分配和数据复制,从而影响性能。不过,在大多数现代C++实现中,vector的内存分配策略已经相当优化,对于不是极端频繁的操作,这种性能影响通常可以忽略。

二、使用push_back和迭代器

另一种拼接vector的方法是遍历第二个vector,并使用push_back函数将其元素逐个添加到第一个vector的末尾。

示例代码

#include <iostream>#include <vector>int main() {    std::vector<int> vec1 = {1, 2, 3};    std::vector<int> vec2 = {4, 5, 6};    // 遍历vec2,将每个元素添加到vec1的末尾    for (auto it = vec2.begin(); it != vec2.end(); ++it) {        vec1.push_back(*it);    }    // 输出结果    for (int num : vec1) {        std::cout << num << " ";    }    std::cout << std::endl;    return 0;}

三、使用reserve优化性能

#include <iostream>#include <vector>int main() {    std::vector<int> vec1 = {1, 2, 3};    std::vector<int> vec2 = {4, 5, 6};    // 预分配足够的内存空间    vec1.reserve(vec1.size() + vec2.size());    // 使用push_back拼接    for (auto it = vec2.begin(); it != vec2.end(); ++it) {        vec1.push_back(*it);    }    // 输出结果    for (int num : vec1) {        std::cout << num << " ";    }    std::cout << std::endl;    return 0;}

四、使用C++11的std::vector::emplace_back

#include <iostream>#include <vector>int main() {    std::vector<int> vec1 = {1, 2, 3};    std::vector<int> vec2 = {4, 5, 6};    vec1.reserve(vec1.size() + vec2.size());    // 使用emplace_back拼接    for (auto it = vec2.begin(); it != vec2.end(); ++it) {        vec1.emplace_back(*it);    }    // 输出结果    for (int num : vec1) {        std::cout << num << " ";    }    std::cout << std::endl;    return 0;}

总结


点击全文阅读


本文链接:http://zhangshiyu.com/post/167374.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 重生八零:妹妹替我嫁给养猪万元户免费_[妹妹张志强家珍]小说章节试读
  • 宋南乔贺景川宋南乔贺景川免费
  • 错轨七年,得知真相后他疯了后续在线阅读_慕行渊小雨乔青璃节选高光片段速递‌
  • 万般风月解语花最新章节在线阅读_裴延江婉婉婉后续在线阅读
  • 「我们才刚答案,你成武圣了?」精彩章节试读_「杨间苏沐晴」精彩节选免费试读
  • (番外)+(全书)沈昭宜傅沉砚(填我十万八千梦+后续+番外)完结_(沈昭宜傅沉砚)列表_笔趣阁(填我十万八千梦+后续+番外)
  • (番外)+(全书)腐草为萤不相念全书+后续+结局(江心璐裴纪臣)全书免费在线_(腐草为萤不相念全书+后续+结局)列表_笔趣阁(江心璐裴纪臣)
  • 孟卿卿谢昭远绮萝(孟卿卿谢昭远绮萝结局+番外)_(孟卿卿谢昭远绮萝)列表_笔趣阁(孟卿卿谢昭远绮萝结局+番外)
  • 孤舟不渡我节选名场面直通车‌_傅斯屿沈静姝程晏淮完结版免费在线阅读
  • 今日热读(跟恶毒女配互换身体后,她哭惨了+后续+结局)沈思允谢景行_跟恶毒女配互换身体后,她哭惨了+后续+结局热点全书在线(沈思允谢景行)
  • 你是我难愈的旧伤+后续+结局(傅深铭夏晚星)_(傅深铭夏晚星)你是我难愈的旧伤+后续+结局列表_笔趣阁(傅深铭夏晚星)
  • 「匿爱成殇」完结_[苏晴顾言黄脸婆]精彩章节试读

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1