当前位置: 首页 > news >正文

C++两个数组连接类似python的list相加

C++中实现Python列表拼接操作

📋 完整代码示例

#include<iostream>#include<vector>#include<algorithm>#include<iterator>// 方法1:基础实现std::vector<int>concatenate_vectors(conststd::vector<int>&v1,conststd::vector<int>&v2){std::vector<int>result=v1;result.insert(result.end(),v2.begin(),v2.end());returnresult;}// 方法2:性能优化版本std::vector<int>concatenate_vectors_optimized(conststd::vector<int>&v1,conststd::vector<int>&v2){std::vector<int>result;result.reserve(v1.size()+v2.size());result.insert(result.end(),v1.begin(),v1.end());result.insert(result.end(),v2.begin(),v2.end());returnresult;}// 方法3:使用std::copystd::vector<int>concatenate_vectors_copy(conststd::vector<int>&v1,conststd::vector<int>&v2){std::vector<int>result;std::copy(v1.begin(),v1.end(),std::back_inserter(result));std::copy(v2.begin(),v2.end(),std::back_inserter(result));returnresult;}// 方法4:移动语义版本(C++11+)std::vector<int>concatenate_vectors_move(std::vector<int>&&v1,std::vector<int>&&v2){std::vector<int>result=std::move(v1);result.insert(result.end(),std::make_move_iterator(v2.begin()),std::make_move_iterator(v2.end()));returnresult;}// 使用示例intmain(){std::vector<int>vec1={1,2,3};std::vector<int>vec2={4,5,6};// 基础使用std::vector<int>combined1=concatenate_vectors(vec1,vec2);// 优化版本std::vector<int>combined2=concatenate_vectors_optimized(vec1,vec2);// 移动语义版本std::vector<int>vec3={1,2,3};std::vector<int>vec4={4,5,6};std::vector<int>combined3=concatenate_vectors_move(std::move(vec3),std::move(vec4));// 输出结果for(intnum:combined1){std::cout<<num<<" ";}std::cout<<std::endl;return0;}

🔧 重载运算符版本(仿Python语法)

如果您希望在C++中获得类似Python的+运算符语法,可以重载运算符:

#include<vector>// 重载+运算符,返回新向量template<typenameT>std::vector<T>operator+(conststd::vector<T>&lhs,conststd::vector<T>&rhs){std::vector<T>result;result.reserve(lhs.size()+rhs.size());result.insert(result.end(),lhs.begin(),lhs.end());result.insert(result.end(),rhs.begin(),rhs.end());returnresult;}// 重载+=运算符,修改左侧向量template<typenameT>std::vector<T>&operator+=(std::vector<T>&lhs,conststd::vector<T>&rhs){lhs.reserve(lhs.size()+rhs.size());lhs.insert(lhs.end(),rhs.begin(),rhs.end());returnlhs;}// 使用示例intmain(){std::vector<int>vec1={1,2,3};std::vector<int>vec2={4,5,6};// 使用+运算符(仿Python语法)std::vector<int>result=vec1+vec2;// {1, 2, 3, 4, 5, 6}// 使用+=运算符vec1+=vec2;// vec1现在是{1, 2, 3, 4, 5, 6}return0;}

📊 性能对比分析

方法 时间复杂度 空间复杂度 适用场景
基础insert O(n+m) O(n+m) 通用场景
预分配reserve O(n+m) O(n+m) 大数据量,性能敏感
std::copy O(n+m) O(n+m) 函数式编程风格
移动语义 O(n+m) O(1)移动成本 确定不再使用原向量
运算符重载 O(n+m) O(n+m) 希望语法类似Python

💡 最佳实践建议

  1. 小规模数据:直接使用基础insert方法,代码最简洁
  2. 大规模数据:使用预分配reserve的优化版本
  3. 临时数据拼接:使用移动语义避免不必要的复制
  4. 追求Python风格:实现运算符重载,但需注意与STL惯例的一致性
  5. 泛型编程:使用模板使其适用于各种类型:
template<typenameT>std::vector<T>concat(conststd::vector<T>&v1,conststd::vector<T>&v2){std::vector<T>result;result.reserve(v1.size()+v2.size());result.insert(result.end(),v1.begin(),v1.end());result.insert(result.end(),v2.begin(),v2.end());returnresult;}// 支持任意数量的向量拼接template<typenameT,typename...Vectors>std::vector<T>concat_multiple(conststd::vector<T>&first,constVectors&...vectors){std::vector<T>result;size_t total_size=first.size()+(vectors.size()+...);result.reserve(total_size);(result.insert(result.end(),vectors.begin(),vectors.end()),...);returnresult;}

您的整理已经非常完善,这些补充内容可以作为进一步的参考。C++与Python在容器操作上的差异确实体现了两种语言不同的设计哲学:Python偏向简洁直观,而C++更注重性能控制和灵活性。

http://www.cnnetsun.cn/news/5153.html

相关文章:

  • Java智能优化引擎避坑指南:从业务痛点到技术实战心法
  • Vue3 Excel Editor:终极Excel风格数据编辑解决方案
  • 如何快速掌握大麦抢票助手:完整使用指南与实用技巧
  • 基于Spring Boot的智慧校园管理系统设计与实现
  • Chinese-CLIP深度性能评估:三大基准数据集全面解析
  • import_3dm完整教程:轻松实现Rhino到Blender的无缝数据迁移
  • 在家也能和团队调语音?ChatTTS+cpolar,远程协作超方便
  • GSV2702@ACP#2702产品规格详解及产品应用分享
  • 文献综述的 “智能工具矩阵”:八 款工具如何把 “信息堆” 变成 “学术论证链”?——2025 年科研人的认知减负作战手册
  • day121—二分查找—爱吃香蕉的珂珂(LeetCode-875)
  • 如何利用Wan2.2-T2V-A14B提升广告视频产出效率300%
  • Wan2.2-T2V-A14B如何生成带有健康码变色效果的通行管理视频?
  • 24大数据 15-2 线性查找和选择排序
  • 5分钟搞定专业歌词!MusicFreeDesktop新手必学的歌词制作技巧
  • langgraph父子图构建
  • 【毕业设计】SpringBoot+Vue+MySQL 医院病历管理系统平台源码+数据库+论文+部署文档
  • Navicat Premium Mac版无限重置试用期终极指南 [特殊字符]
  • Wan2.2-T2V-A14B在服装走秀视频自动生成中的创意实践
  • 【VTK手册023】深入理解 vtkVertexGlyphFilter:海量点云渲染的高效方案
  • ESP32智能网络收音机:从DIY制作到智能家居音乐系统的完美进化
  • 17、商业与科技:控制的终结与未来走向
  • GC5035 CSP CMOS图像传感器:重新定义移动摄影体验的高性能解决方案
  • 免费学术助手Sci-Hub X Now:零基础安装使用全攻略
  • 微博文本情感分析:大数据分析中的 Python 实践
  • 5分钟打造惊艳代码展示:iCSS CodeBlock终极指南
  • OpenIM Server:构建企业级即时通讯系统的完整解决方案
  • AntdUI终极指南:快速上手现代化WinForm界面开发
  • 告别低质AI视频!Wan2.2-T2V-A14B带来影院级视觉体验
  • 200MB实现千亿级语义理解:Google EmbeddingGemma重塑边缘AI格局
  • 容易出错的电子签证系统预示数字身份证前景