为什么不删除矢量内容?

时间:2019-03-26 08:02:49

标签: c++ vector

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

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

3 个答案:

答案 0 :(得分:0)

您的分配是副本,而不是原始v1。 将v1的副本放入v2后,它们将分开。 因此,无论您对v1做了什么,它都不会对v2做任何事情。 您可以尝试了解向量的工作方式,赋值操作是复制而不是引用。

答案 1 :(得分:0)

将您的v1数据复制到v2后被删除,
v2已保存v1数据,因此对v2无效

答案 2 :(得分:0)

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

v2.push_back(v1);

制作v1的副本以插入v2。

std :: vector使所有内存连续,因此在使用std :: vector时几乎没有机会避免此复制。

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