为什么我的矢量打印出所有零
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
一个新元素被添加到向量中时,所以你从 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];
}
相关文章:
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- 为什么我的递归函数按降序打印,然后按升序打印?
- 为什么我的字符串变量没有打印完整的字符串?
- 我的问题是关于C++中数字和序列的重复以及如何打印它们?
- 为什么我的打印功能不起作用?链表
- 在我的变量打印C++后无法获得 $ 打印符号
- 如何打印我在地图中使用的数组?
- 我的链表没有按预期打印出来?
- 只有我的"链接列表"中的第一个节点正在打印
- 为什么我的主文件.cpp不打印头文件中的任何内容
- 打印我的字符串阵列时,会遇到细分错误
- Cout不会打印我的字符串
- 如何在C++的下一行打印我的名字
- 我不能打印我的书的名字,但可以打印其他所有的东西
- 当我尝试通过我的函数打印我的列表时出现分段错误
- 打印我的Get MAC地址函数的std::字符串时出现意外输出
- 为什么此代码不打印我的数组?
- 链表需要帮助无法打印我的数据.想要添加功能.在 C - C++ 中
- 在C++中以相反的顺序打印我的链接列表