【问题标题】:C++ output elements of a vector not expected不期望向量的 C++ 输出元素
【发布时间】:2021-03-21 00:44:09
【问题描述】:

我正在练习vector和ranged for循环,我的代码:

#include <iostream>
#include <vector>
using namespace std;

int main(){
    int size,element;
    cout<<"enter vector size: ";
    cin>>size;
    vector<int>v(size);
    for(int i=0; i<size; i++){
        cout<<i<<"\t";
        cin>>element;
        v.push_back(element);
    }
    for(int p : v) cout<<p<<" ";
}

我输入了 3,然后输入了 1、2、3,但输出为“0 0 0 1 2 3”。你能解释一下 0 是从哪里来的吗?非常感谢!

【问题讨论】:

    标签: c++ ranged-loops


    【解决方案1】:
    vector<int>v(size);
    

    这将创建一个大小等于大小变量的向量。现在,如果您执行 push_back ,它将创建一个新的向量并使用 size+1 并将元素添加到其中。 而是在 for 循环中执行 cin&gt;&gt;v[i];

    【讨论】:

      【解决方案2】:

      vector&lt;int&gt;v(size); 创建一个由 size 零初始化元素组成的向量(在您的情况下为 3)。 push_back 然后将新元素添加到此向量的末尾,这解释了您得到的结果。

      您可以使用reserve 为向量中的元素保留空间。如果您事先知道要添加多少元素,这会加快速度。

      【讨论】:

      • 作为附录,您可能需要查找vector 的reserve 方法。对于某些应用程序,创建一个默认(零)大小的向量是有意义的,然后调用reserve 以获取您想要的内存大小(而向量大小不会改变),然后添加您的值。
      • 我们不使用范围循环来 cin 向量的元素对吧?因为我只看到使用范围循环的 cout 示例(for(int u : v) cin>>v[u]; 不起作用)
      • 不改变循环内向量的大小就可以了。
      • 非常感谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-30
      • 2019-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多