为啥当我将其大小初始化为 5 并且只给出 5 个元素时,向量的大小会增加到 10?

Posted

技术标签:

【中文标题】为啥当我将其大小初始化为 5 并且只给出 5 个元素时,向量的大小会增加到 10?【英文标题】:Why is the vector increasing its size to 10 when i am initialising its size to 5 and giving only 5 elements?为什么当我将其大小初始化为 5 并且只给出 5 个元素时,向量的大小会增加到 10? 【发布时间】:2020-04-05 13:57:16 【问题描述】:

所以我在向量上做这个问题,我必须接受输入然后反转所有元素

int main() 

    int i,n,a;   
    cin >> n;

    vector<int> arr(n);
    for(i=0;i<n;i++)
        cin >> a;
        arr.push_back(a);
     
    sort(arr.begin(),arr.end());
    for(i=0;i<n;i++)
        cout << arr[i] << " ";
    
    return 0;

我写了这段代码,我提到向量的大小为 n,并且只在其中推送 n 个元素。但是对于 5 个元素,输出结果为 0 0 0 0 0。我猜这是因为向量已将其容量扩展到 10,因此最后 5 个元素被打印出来,显然是 0。为什么会发生这种情况?

【问题讨论】:

因为你使用了arr.push_back(a); 而不是arr[i] = a; 【参考方案1】:

vector&lt;int&gt; arr(n); 从一开始就创建一个大小为n 的向量,所有元素都初始化为int 也就是零。然后循环通过push_back添加更多元素n

【讨论】:

【参考方案2】:

vector&lt;int&gt; arr(n);

由于您声称n = 5,这行代码创建arr = 0, 0, 0, 0, 0

然后你运行一个循环 5 次,并通过 push_back 向你的向量添加另外 5 个元素:

for(i=0;i<n;i++)
    cin >> a;
    arr.push_back(a); // <-- mistake

然后通过

打印前 5 个元素(为 0)
for(i=0;i<n;i++)
    cout << arr[i] << " ";

这就是为什么,你的输出是0 0 0 0 0

解决方案:

您应该将这些元素添加到您为矢量保留的空间中:

arr.push_back(a); 替换为arr[i] = a;

旁白:

所以我在向量上做这个问题,我必须接受输入和 然后反转所有元素

sort(arr.begin(),arr.end()); 不会帮助您完成这项任务。

你应该使用std::reverse:

reverse(arr.begin(), arr.end());

【讨论】:

以上是关于为啥当我将其大小初始化为 5 并且只给出 5 个元素时,向量的大小会增加到 10?的主要内容,如果未能解决你的问题,请参考以下文章

PHP:为啥 strtotime 转换给出不同的值并且只限于特定的日期?

处于释放模式时,C ++向量未初始化为空

当我将指针初始化为NULL时,运行结果很奇怪

为啥存储过程没有在一个字符串中给出输出并且在 MySql 6.0 上执行的存储过程在 MySql 5.0 上给出错误

为啥只有数组的第一个元素被初始化为-1?而其余的都是0 [重复]

架构更改后,数据库不会重新初始化为本地订阅者