【问题标题】: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;

标签: c++ vector stl


【解决方案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());

    【讨论】:

      猜你喜欢
      • 2015-07-25
      • 1970-01-01
      • 2019-06-27
      • 2011-06-13
      • 1970-01-01
      • 1970-01-01
      • 2013-08-05
      • 2016-12-22
      • 1970-01-01
      相关资源
      最近更新 更多