我有这个初步代码:
#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
我做错了什么?
答案 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
)。
两个解决方案:
更改
vector<int> first(9);
到
vector<int> first;
或者,更改
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];
}