You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中vector嵌套容器push_back是否复制元素的疑问

C++ 嵌套vector与Java嵌套ArrayList的行为差异

是的,每次调用vec.push_back(temp)时,C++都会创建temp的独立副本并插入到vec中。

C++ 侧行为解析

C++的vector遵循值语义:当你将一个vector对象传入push_back时,容器会调用该对象的拷贝构造函数,生成一个完全独立的副本存入容器。这个副本拥有自己的内存空间,和原temp对象互不干扰。

你的代码执行流程对应的状态变化:

  • 第一次push_back:temp为[1],vec中存入该状态的副本;
  • 第二次push_back:temp新增元素后变为[1,2],vec中存入这个新状态的副本;
  • 第三次push_back:temp移除最后一个元素回到[1],vec再次存入当前状态的副本。

最终运行代码输出:

vec size: 3
1 
1 2 
1 

Java 侧行为解析

Java的ArrayList遵循引用语义:你向容器中添加的不是对象本身,而是指向该对象的引用。三次add(temp)操作,本质是把同一个temp对象的引用重复存入外层ArrayList。

后续对temp的修改(添加、移除元素)都是直接修改同一个对象的内容,因此遍历外层容器时,所有引用指向的都是temp的最终状态,输出为:

List size: 3
1 
1 
1 

内容的提问来源于stack exchange,提问作者give_it_a_bit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 22:27:37