乐闻世界logo
搜索文章和话题

为什么在用size声明的向量上使用push_back会导致向量为零?

7 个月前提问
6 个月前修改
浏览次数25

1个答案

1

在C++中,如果你使用size来初始化一个vector,那么你实际上已经为这个vector指定了一定数量的元素,并且这些元素被默认初始化了。当你之后使用push_back()方法添加元素时,这些元素会被添加到已经初始化的元素之后,而不是替换或清除这些元素。

举一个例子,假设我们有以下代码:

cpp
#include <iostream> #include <vector> int main() { std::vector<int> vec(5); // 初始化一个大小为5的向量,每个元素默认为0 vec.push_back(10); // 添加元素10到向量的末尾 for (int i : vec) { std::cout << i << " "; // 输出向量的元素 } return 0; }

运行此代码将输出:

shell
0 0 0 0 0 10

如你所见,最初的向量由五个默认值0组成,然后10被添加到这些元素的后面,使得总元素数量变成了六个。这就是使用push_back()在已经通过size初始化的向量上添加元素的效果。

如果你的目标是创建一个空的向量并只通过push_back()添加元素,你应该使用不带参数的构造函数来初始化向量:

cpp
std::vector<int> vec; // 初始化一个空的向量 vec.push_back(10); // 添加元素10 vec.push_back(20); // 添加元素20 for (int i : vec) { std::cout << i << " "; // 输出向量的元素 }

这段代码将输出:

shell
10 20

这样,向量中只包含了通过push_back()方法添加的元素。

2024年7月3日 23:21 回复

你的答案