【问题标题】:What is wrong in this if I provide input to a vector like this? [duplicate]如果我向这样的向量提供输入,这有什么问题? [复制]
【发布时间】:2021-09-15 09:43:26
【问题描述】:
vector<int> a;
    
    for(int i=0;i<5;i++)
    {
        a[i]=i;
    }

我是初学者,刚刚接触过 C++ 中的向量。我了解到,与数组不同,我们不必事先指定向量的大小。那么,为什么我不能这样做呢?

【问题讨论】:

    标签: c++ arrays vector


    【解决方案1】:

    我了解到,与数组不同,我们不必事先指定向量的大小。那么,为什么我不能这样做呢?

    解决方案

    将向量的大小初始化为n。然后你可以像下面这样使用cin -

    int n;
    cin>>n;
    vector<int> a(n);//Vector declared with size
    for(int i=0;i<n;i++)
        cin>>a[i];
    

    这背后的原因是 - 向量的大小动态增长,如果你在编译时初始化它们的大小,你绝对可以cin 值。但是,如果您不在编译时初始化大小,那么要让向量了解要分配多少空间,您应该使用push_back

    当您没有在编译时使用 vector&lt;int&gt; a; 初始化大小 n 时,该位置没有值,因此您不能使用 [] 运算符,因为 [] 用于访问而不是调整大小。当您将其初始化为 vector&lt;int&gt; a(n); 时,这些值主要使用值 0 进行初始化,并且由于已初始化,您可以使用 [] 运算符。


    进一步阅读 -

    How Vectors Grow

    【讨论】:

    • 您可能想改写不是为了写。您当然可以使用[] 进行写作。您无法使用 [] 调整大小。
    • 除了 user4581301 提出的问题外,“预定义”和“声明”带有大小的向量的措辞是不正确的。正确的描述是vector&lt;int&gt; a(n)初始化向量的大小为n。声明在 C++ 中完全是另一回事,定义是一种声明。 vector&lt;int&gt; a(n) 定义(并声明)a 的事实并不意味着声明或定义为 n 的大小。
    • 谢谢彼得和@user4581301,我已经进行了编辑,在写答案时我会更加小心。非常感谢您的建议
    【解决方案2】:

    是的,在某些情况下您不必指定矢量大小。

    for(int i=0;i<5;i++)
    {
        a.push_back(i);
    }
    

    这增加了向量的大小,因为您不访问向量的元素目录,而是要求向尾部添加新元素,而向量类确实最适合您。

    【讨论】:

      猜你喜欢
      • 2021-02-08
      • 2020-06-17
      • 2020-07-06
      • 2023-02-13
      • 2022-01-24
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      • 2014-11-26
      相关资源
      最近更新 更多