为什么我的矢量打印出所有零

Why does my vector print out all zeroes?

本文关键字:打印 我的 为什么      更新时间:2023-10-16

我有这个初步代码:

#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

我做错了什么?

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

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

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

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

原因是vector<int> 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;
    

当你调用push_back一个新元素被添加到向量中时,所以你从 9 个零开始,然后在零之后添加从 0 到 9 的数字。

push_back的工作原理是添加指定的元素并将矢量大小增加 1。

创建向量

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

起初,您创建了一个包含 9 个元素的向量,如果您自己没有明确指定初始值设定项,则由 0 初始化

vector<int> first(9);

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

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

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 个零。

如果你想在向量中只有 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];
}