为什么不擦除矢量内容

Why does not the vector content be erased?

本文关键字:擦除 为什么不      更新时间:2023-10-16

如果清除 v1,内容会在 v2 中消失吗?为什么它不会消失?原因是什么?

vector<string> v1;
vector<vector<string>> v2;
v1.push_back("a");
v1.push_back("b");
v2.push_back(v1);
v1.clear();

您的分配是副本,而不是原始 v1。将 V1 的副本放入 V2 后,它们是分开的。因此,无论您对 V1 做了什么,它都不会对 V2 执行任何操作。你可以尝试了解向量是如何做的,分配操作是复制而不是引用。

复制到 v2 后将删除 v1 数据,
v2已经保存了v1数据,所以对v2没有影响

好问题。这是我们所有人都必须一遍又一遍地问自己的问题,以了解正在使用的内存发生了什么。 当通过将另一个对象推入矢量来创建矢量元素时...

v2.push_back(v1);

制作 v1 的副本以插入到 v2 中。

std::vector 使所有内存保持连续,因此在使用 std::vector 时很少有机会避免此副本。

对于其他类型的 STL 容器,如果 v1 的生命周期在插入时结束,则可能避免复制,这意味着使用 move 构造函数。 但是,std::vector通常不会发生这种情况。