1、STL中的容器直接赋值是安全的,即是深拷贝。

vecotr<string> vec1; vec1.push_back("helloWorld");    vecotr<string> vec2;

vec1 = vec2,赋值之后,vec1和vec2之间就没有关联了  。

关于容器的拷贝见: 标准容器的赋值和拷贝是安全的 - 相印 - 博客园 (cnblogs.com)

C++深拷贝与浅拷贝 - ay-a - 博客园 (cnblogs.com)

注:深拷贝复制的是地址和内存,浅拷贝复制的是地址。

2、容器的另一种深拷贝方式是用copy函数,直接上代码:

#include <iostream>
#include <string>
#include <map>
#include <string.h>
#include <iterator>
using namespace std;int main(){map<string,int>m_map;m_map.insert(make_pair<string,int>("Element1",5));m_map.insert(make_pair<string,int>("Element2",15));map<string,int>::iterator it = m_map.begin(); for(it;it != m_map.end();it++){cout << "m_map first is " << it->first << ", "<< "m_map second is " << it->second << endl;}cout << "Previous m_map Size is ==========================" << m_map.size() << endl;cout << "Start Copying Map ==============================" << endl;map<string,int>m_Copymap;
/利用copy拷贝//copy(m_map.begin(),m_map.end(),inserter(m_Copymap,m_Copymap.begin()));
拷贝结束//cout << "Copy Map Done! ======================" << endl;m_map.clear();cout << "Clear Previous Map Done!=======================" << endl;cout << "Now m_map Size is =======================" << m_map.size() << endl;cout << "m_Copymap Size is " << m_Copymap.size() << endl;map<string,int>::iterator it1 = m_Copymap.begin(); for(it1;it1 != m_Copymap.end();it1++){cout << "m_Copymap first is " << it1->first << ", "<< "m_Copymap second is " << it1->second << endl;}return 0;
}

实际运行结果如下:

注:深拷贝的容器不会覆盖掉该容器中原先存在的数据,若只保存当前拷贝过来的数据,则应在拷贝前clear容器中的原先存在数据。

vector的深拷贝方法同上。

注:1、vecotr的内存问题:

vector对象存在栈中,栈中是vector所存数据的地址,而数据保存在堆中。对于存储数据量较大的变量,vector存在内存问题。在不使用时,可以进行清理,清理vector内存的方法是定义一个空的vector,使用空的vector释放内存。

vector<int> tmp; //空vec.swap(tmp); //待释放的vecotr变量

2、map的内存释放:

map的释放也可以参考上面的vector的方法,但map的释放不是立即释放的,map会根据内存情况自己释放,若要立即释放如下:

#include <iostream>
#include <map>
#include <malloc.h>
#include <string>
int main()
{map<string, int> test;test["Alice"] = 3;test["Cindy"] = 5;test["Bob"] = 7;map<std::string, int>().swap(test);malloc_trim(0);}

参考于:(6条消息) C/C++编程:STL中map内存彻底释放方法_OceanStar的博客-CSDN博客_map释放内存

C/C++中深浅拷贝(map、vector)与内存释放相关推荐

  1. C++ 中 map 容器的内存释放机制及内存碎片管理

    C++ 中 map 容器的内存释放机制及内存碎片管理 C++ 中的容器很好用,比如 vector, map 等,可以动态扩容,自己管理内存,不用用户关心,但是在某些极端情况下,如果内存比较紧张的情况下 ...

  2. Java中深浅拷贝之List

    List的浅拷贝 浅拷贝将引用复制.指向的是同一个地址,改变A和B中的任何一个,另一个都会随之发生变化. List浅拷贝(针对List里 装的是对象-----"引用"[基础类型不分 ...

  3. JS中深浅拷贝 函数封装代码

    一.了解 基本数据类型保存在栈内存中,按值访问,引用数据类型保存在堆内存中,按址访问. 二.浅拷贝 浅拷贝只是复制了指向某个对象的指针,而不是复制对象本身,新旧对象其实是同一内存地址的数据,修改其中一 ...

  4. java的深浅拷贝_Java中深浅拷贝

    一,浅拷贝 ①对于数据类型是基本数据类型的成员变量,浅拷贝会直接进行值传递,也就是将该属性值复制一份给新的对象.因为是两份不同的数据,所以对其中一个对象的该成员变量值进行修改,不会影响另一个对象拷贝得 ...

  5. js中深浅拷贝理解与方法

    深浅拷贝的方法 堆栈理解 基本数据类型 number.string.boolean.null.undefined 引用数据类型 object.function.array 栈内存 存储基本数据类型内容 ...

  6. vector的内存释放

    1. vector容器的内存自增长 与其他容器不同,其内存空间只会增长,不会减小.先来看看"C++ Primer"中怎么说:为了支持快速的随机访问,vector容器的元素以连续方式 ...

  7. c++ vector的内存释放

    c++中vector的一个特点是: 内存空间只会增长,不会减小.即为了支持快速的随机访问,vector容器的元素以连续方式存放,每一个元素都挨着前一个元素存储.设想,如果每次vector添加一个新元素 ...

  8. Python中深浅拷贝的案例教程

    在本节中,您将通过运行Python中的浅拷贝和深拷贝实例来理解copy模块创造副本的不同. 在Python中复制对象 在Python中,我们使用=运算符来创建对象的副本.您可能会认为这会创建一个新对象 ...

  9. PHP如何让内存不释放,PHP中使用unset销毁变量并内存释放问题

    代码如下: for ( $i = 1; $i < 100; $i++ ) { $str = str_repeat('01234567', $i); $a = memory_get_usage() ...

  10. python的深浅拷贝与linux中的软硬链接

    记录一下我对python的深浅拷贝以及linux中的软硬链接的理解 放在开头 软硬连接 python中对象的深浅拷贝 浅拷贝 深拷贝 copy.copy()对可变和不可变对象的不同 总结 放在开头 在 ...

最新文章

  1. Ubuntu 下 使用 adb logcat 显示 Android 日志
  2. windows中端口号(port id)和port的区别,如何通过端口查看进程pid,如何通过pid查看程序,如何通过pid查看端口?
  3. 常用于生产部署方式详解 灰度发布 滚动发布 蓝绿发布
  4. Self-training在目标检测任务上的实践
  5. boost::gil模块数字扩展中的 resize_view() 示例
  6. nginx动静分离配置_Nginx 动静分离与负载均衡的实现
  7. MYSQL添加约束的两种方法
  8. 【七】jquery之属性attr、 removeAttr、prop[全选全不选及反选]
  9. 笑谈ArcToolbox (1) ArcToolbox 的发展方向
  10. [BZOJ1815BZOJ1488]有色图/图的同构(Polya定理)
  11. redis 永不过期_Redis系列八Redis数据过期策略详解
  12. 元宇宙8大创业方向:虚拟偶像、数字孪生…
  13. 服务假死问题解决过程实记(一)——问题发现篇
  14. 豆瓣高分电影爬取学习心得
  15. MyBatis 极速入门
  16. php微信生成微信公众号二维码扫描进入公众号带参数
  17. Oracle递归的实现
  18. 在html中调用QQ,MSN,旺旺,Skype,Email的方法
  19. ffmpeg录制桌面视频和系统内部声音(音视频同步)
  20. 面试必备:高频算法题汇总「图文解析 + 教学视频 + 范例代码」之 字符串处理+动态规划 合集!

热门文章

  1. node.js学习笔记(黑马教程)-1-基础了解
  2. Linux下安装mysql(yum、二进制包、源码包)
  3. ad如何设置pcb板子形状_FAQ031:如何将Altium的PCB板子导入CST
  4. 生活中常见物联网实例_包邮赠书| 什么是物联网?常见IoT 物联网协议最全讲解...
  5. php data取年月,PHP-date函数 年、月、日参数详解
  6. php如何优化递归函数,php递归函数怎么用才有效?php递归函数典型例子
  7. java doctitle_Java ActionItem.setDocTitle方法代码示例
  8. Introduction to Computer Networking学习笔记(三):IP与子网掩码
  9. c 打印二叉树_基础扩展 | 22. 遍历二叉树—前序遍历算法的VBA代码解析
  10. 列转行 oracle11g,PostgreSQL 实现列转行问题