繁体   English   中英

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

[英]Why does my vector print out all zeroes?

我有这个初步的代码:

#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时, push_back一个新元素添加到向量中,因此从9个零开始,然后在零之后添加从0到9的数字。

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

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

首先,您创建了一个包含9个元素的向量,如果您自己未明确指定初始化器,则将其初始化为0。

vector<int> first(9);

所以现在向量首先包含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个元素,则可以编写

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];
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM