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

为何输入相同元素时C++ vector的大小会出现异常变化?

问题原因分析
  • 核心错误:循环计数器被输入值覆盖
    你在for (int i=0; i<n; ++i)循环中,直接把输入值读到循环变量i里,直接篡改了循环的计数逻辑,循环的执行次数完全由输入值决定,不再是固定的n次。

第一种场景:输入n=5,后续输入1、2、3、4、5
循环执行过程:

  1. 初始i=0,满足i<5,读入1赋值给i,存入vec1,循环结束自动执行++i,i变为2
  2. i=2满足i<5,读入2赋值给i,存入vec1,++i后i=3
  3. i=3满足i<5,读入3赋值给i,存入vec1,++i后i=4
  4. i=4满足i<5,读入4赋值给i,存入vec1,++i后i=5
    此时i=5不满足i<5,循环直接终止,第5个输入5根本没有被读取,最终vec1只有4个元素,和观测到的现象一致。

第二种场景:预期循环执行4次,后续输入1、2、2、2、3、4
循环执行过程中,多次读入2赋值给i:比如某次循环i=3进入循环,读入2赋值给i,存入vec1后执行++i,i回到3,再次满足i<4进入循环,相当于循环多执行了多次,直到后续读入的数加1后大于等于n才会终止,所以最终会把输入的6个值全部存入vec1,大小为6。

  • 次要错误:循环体缺省花括号导致逻辑不符合预期
    你写的遍历代码没有加花括号:
for( it = vec1.begin(); it !=vec1.end(); it++)
    cout<<*it<<" ";
    cout<<vec1.size();

只有第一行cout<<*it<<" ";属于循环体,第二行打印vector大小的代码只会在遍历结束后执行一次,不会每次遍历都打印大小。


修复方案

将循环内的输入值存入独立的临时变量即可,参考修改后代码:

#include<bits/stdc++.h>
using namespace std;

int main(){
    int n;
    cin>>n;
    vector<int> vec1;
    for (int i=0; i<n; ++i){
        int tmp;
        cin>>tmp;
        vec1.push_back(tmp);
    }
    sort(vec1.begin(), vec1.end());
    vector<int> :: iterator it;
    for( it = vec1.begin(); it !=vec1.end(); it++){
        cout<<*it<<" ";
    }
    cout<<vec1.size();
    return 0;
}

内容的提问来源于stack exchange,提问作者Sanjeev Kumar Singh-19CS48

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 12:54:03