[英]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
)。
两种解决方案:
更改
vector<int> first(9);
至
vector<int> first;
或者,更改
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.