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

时间:2014-02-11 18:17:11

标签: c++ vector

我有这个初步代码:

#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

我做错了什么?

4 个答案:

答案 0 :(得分:5)

您正在使用9个空值(0)初始化向量,然后推回10个值(第一个为0),产生一个向量19个元素中,前10个元素都是0.这就是first(9)所做的,它创建了9个元素的向量。

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

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

答案 1 :(得分:1)

您是否意识到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;
    

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

首先,您创建了一个包含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个元素。

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