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

为何C++代码输出出现零?push_back与下标赋值的差异问题

问题原因分析

当你用vector<int> b(m)创建vector时,这个容器会预先分配m个默认值为0的int元素——因为int类型的默认初始化值就是0。

  • 用push_back(k)时,是在这m个0的末尾追加新元素,循环m次后,b的总长度变成了m(初始的0) + m(输入的元素)=2m,所以输出时会先显示前m个0,再显示你输入的数值。
  • 用b[j]=k时,是直接覆盖vector中已存在的第j个元素(也就是初始的0),循环结束后b的长度还是m,所有元素都是你输入的值,自然不会有0。
解决方法

方法1:直接覆盖初始元素(推荐,贴合你原本的写法)

保持vector<int> b(m)的创建方式,用下标赋值替换push_back:

vector<int> b(m);
cout<<"Element:"<<endl;
for(int j=0;j<m;j++)
{
    int k;
    cin>>k;
    b[j] = k; // 覆盖初始的0
}

方法2:创建空vector后追加元素

如果不想预先创建默认元素,可以初始化空vector,再逐个添加元素:

vector<int> b;
b.reserve(m); // 可选:预分配m个元素的空间,避免多次扩容提升性能
cout<<"Element:"<<endl;
for(int j=0;j<m;j++)
{
    int k;
    cin>>k;
    b.push_back(k); // 从空开始追加,最终长度为m
}
额外小提示

你的代码中vector<vector<int>>a(2);初始化了包含2个空vector的容器,之后又循环2次push_back(b),最终a会有4个元素(前两个是空vector,输出时会显示两行空内容)。如果不需要这两个初始空vector,改成vector<vector<int>> a;即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 06:10:34