1、STL中的容器直接赋值是安全的,即是深拷贝。
vecotr vec1; vec1.push_back(“helloWorld”); vecotr vec2;
vec1 = vec2,赋值之后,vec1和vec2之间就没有关联了 。
关于容器的拷贝见:标准容器的赋值和拷贝是安全的 - 相印 - 博客园 (cnblogs.com)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C++深拷贝与浅拷贝 - ay-a - 博客园 (cnblogs.com)
注:深拷贝复制的是地址和内存,浅拷贝复制的是地址。
2、容器的另一种深拷贝方式是用copy函数,直接上代码:
#include
#include
#include
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
实际运行结果如下:
注:深拷贝的容器不会覆盖掉该容器中原先存在的数据,若只保存当前拷贝过来的数据,则应在拷贝前clear容器中的原先存在数据。
vector的深拷贝方法同上。
注:1、vecotr的内存问题:
vector对象存在栈中,栈中是vector所存数据的地址,而数据保存在堆中。对于存储数据量较大的变量,vector存在内存问题。在不使用时,可以进行清理,清理vector内存的方法是定义一个空的vector,使用空的vector释放内存。
vector tmp;?//空
vec.swap(tmp); //待释放的vecotr变量
2、map的内存释放:
map的释放也可以参考上面的vector的方法,但map的释放不是立即释放的,map会根据内存情况自己释放,若要立即释放如下:
#include
#include
参考于:(6条消息) C/C++编程:STL中map内存彻底释放方法_OceanStar的博客-CSDN博客_map释放内存