【问题标题】:Why does my vector print out all zeroes?为什么我的向量打印出全零?
【发布时间】:2014-02-11 18:17:10
【问题描述】:

我有这个初步代码:

#include "std_lib_facilities_4.h"

void numbers()
{
    vector<int> first(9);
    for (int i = 0; i <= 9; ++i)
    {
            cout << i << endl;
            first.push_back(i);
    }
    for (int j = 0; j <= 9; ++j)
            cout << first[j];
}

int main()
{
        numbers();
}

我希望在打印每个元素时都能打印出数字 1、2、3、4、5、6、7、8 和 9。相反,我得到了这个:

0
1
2
3
4
5
6
7
8
9
0000000000

我做错了什么?

【问题讨论】:

  • 什么是 std_lib_facilities_4.h?
  • 哦,对不起,我应该提到这一点。 std_lib_facilites_4.h 是我的教授专门为我的 C++ 课程制作的普通 std_lib_facilites.h 的编辑版本。据我所知,基本相同,只是做了一些改动。
  • 什么是普通的std_lib_facilites.h
  • @Nabla:可能是 Bjarne Stroustrup 书中的那个:stroustrup.com/Programming/std_lib_facilities.h

标签: c++ vector


【解决方案1】:

您正在用 9 个空值 (0) 初始化向量,然后推回 10 个 值(第一个是 0),生成一个包含 19 个元素的向量,其中前 10 个仍然是 0。这就是 first(9) 所做的,创建一个包含 9 个元素的向量。

而不是push_back,只需将元素设置为新值:

for (int i = 0; i <= 9; ++i)
    first[i] = i;

【讨论】:

  • 0
【解决方案2】:

您是否意识到first 的大小将是19?并且第一个9 值都将是0

原因是vector&lt;int&gt; first(9); 用大小9 用所有值0 初始化它。然后在for 循环中,每次执行push_back() 时,都会向它添加一个新值(使其大小为+1)。

两种解决方案:

  1. 改变

    vector<int> first(9);
    

    vector<int> first;
    
  2. 或者,改变

    vector<int> first(9);
    ...
    first.push_back(i);
    

    vector<int> first(10);
    ...
    first[i] = i;
    

【讨论】:

    【解决方案3】:

    当您调用 push_back 时,向量中会添加一个新元素,因此您从其中的 9 个零开始,然后在零之后添加从 0 到 9 的数字。

    push_back 通过添加指定元素并将向量大小增加一来工作。

    创建向量时传递的数字是初始大小,对于 int 向量,所有值最初都是 0。

    【讨论】:

      【解决方案4】:

      一开始你创建了一个包含 9 个元素的向量,如果你自己没有明确指定一个初始化器,它会被初始化为 0

      vector<int> first(9);
      

      所以现在vector首先包含9个元素,每个元素都由0初始化。

      然后使用 push_back 方法在向量末尾添加新的 10 个元素

      for (int i = 0; i <= 9; ++i)
      {
              cout << i << endl;
              first.push_back(i);
      }
      

      所以现在向量包含 9 个初始零,然后是 0、1、2、3、4、5、6、7、8、9。也就是说,它的前 10 个元素等于 0。

      在这个循环中

      for (int j = 0; j <= 9; ++j)
              cout << first[j];
      

      您输出前 10 个元素,即十个零。

      如果你只想在向量中包含 10 个元素,那么你可以写任何一个

      void numbers()
      {
          vector<int> first;
          first.reserve( 10 );
      
          for (int i = 0; i <= 9; ++i)
          {
                  cout << i << endl;
                  first.push_back(i);
          }
          for (int j = 0; j <= 9; ++j)
                  cout << first[j];
      }
      

      void numbers()
      {
          vector<int> first( 10 );
      
          for (int i = 0; i <= 9; ++i)
          {
                  cout << i << endl;
                  first[i] = i;
          }
          for (int j = 0; j <= 9; ++j)
                  cout << first[j];
      }
      

      【讨论】:

        猜你喜欢
        • 2018-01-29
        • 1970-01-01
        • 2015-10-31
        • 2021-12-31
        • 1970-01-01
        • 2021-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多