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

C++中vector调用push_back后为何输出多余默认构造对象?

问题原因

核心问题出在vector的初始化逻辑:

vector<Person> per(3);

这行代码会创建一个初始长度为3的vector,内部的3个元素会自动调用Person的无参默认构造函数初始化。你实现的默认构造函数没有对_name、_age两个成员做赋值操作,其中_age属于未初始化的int类型,值是不确定的(本次运行输出为-1属于未初始化的随机值),_name则默认是空字符串。

后续调用3次push_back,是在已有的3个默认构造对象的末尾追加3个自定义对象,此时vector总长度为6。范围for循环会遍历全部6个元素,因此会先输出3条无效数据,再输出3条你预期的正确数据,和实际运行结果完全一致。

修复方案

两种常用修复方式二选一即可:

  • 方案一:初始化vector时不指定初始长度,创建空容器后再插入元素
    将vector<Person> per(3);修改为vector<Person> per;,后续调用3次push_back后容器长度就是3,遍历输出的全是有效数据。
  • 方案二:保留初始长度,直接通过下标给对应位置赋值
    删掉3个push_back语句,改为直接给已初始化的3个位置赋值:
    per[0] = p1;
    per[1] = p2;
    per[2] = p3;
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:30:03