东坡下载:内容最丰富最安全的下载站!

帮助|文件类型库|最新更新|下载分类|排行榜

说明书三农书屋计算机书库健康书屋中小学教辅考试宝典经典名著电视说明书洗衣机说明书相机说明书健康教育公务员考试

首页书籍教程计算机书库 → STL常见问题工具书 2017 最新版

STL常见问题工具书

STL常见问题工具书2017 最新版

  • 大小:20.4M
  • 语言:中文
  • 平台:WinAll
  • 更新:2017-02-22 11:55
  • 等级:
  • 类型:计算机书库
  • 网站:暂无
  • 授权:免费软件
  • 厂商:
  • 产地:国产软件
好用好玩 50%(0)
坑爹 坑爹 50%(0)
软件介绍软件截图相关软件软件教程网友评论下载地址

STL常见问题工具书是今年最新最全的工具资料内容,是编程人员在从事工作期间必须要用到的一些东西,有了它你的工作可以更加轻松,每天的工作时间会大大缩短,让你的编程从此更加厉害,需要的下载吧。

STL常见问题工具书说明:

Q:以下两种定义方式,在进行map.clear()的时候,内存释放上有啥不同?

typedef map<CString,CFileAttribute> MAPStr2FileAttr;

typedef map<CString,CFileAttribute *> MAPStr2FileAttr; 

A:clear()相当于earse(m.begin(),   m.end());

若定义的map的存储对象是一个类对象:

拷贝是整个STL(Standard Template Library,标准模板库)工作的方式,所以容器中保存的是副本,而不是要添加的对象本身。对象原件在副本拷贝存放结束后便可以结束生命,而在使用clear()的时候,对象副本会去走到析构函数,进行对象内部的内存释放。clear()后,对象拷贝被析构,剩下的只是raw   memory,即没有被初始化的内存,它们将被归还到stl的内存分配器alloc里的(记得吗,vector/list等所有容器都有一个alloc参数的,就是这东西),容器本身已经不再拥有这块内存了。内存归还了,只不过不是归还入系统堆而已。(除了vector不能(自动)释放内存,其它STL容器都会在每一个erase动作后释放一块内存。)

若定义的map存储对象是一个类对象的指针:

这时一般不能采用clear()函数,因为clear()不会自动释放原来对象所占用的内存。这时可以使用erase()辅助delete语句进行元素删除和内存释放。

上面这句话我是这样理解的,因为存入的是指针,这个指针指向一块区域(new出来的,eg:class A, A *a = new A()),但是毕竟map里面的value值是个指针,就是一个地址而已,因此在clear的时候只是把指针清除掉了,而指针指向的内容依旧存在。因此一般要在clear之前先释放掉这些个指针指向的空间。

另外使用的是类对象指针时,还需要维护这个指针不受到破坏。

小结:

如果用容器存副本,则容器销毁的时候,副本也会自动被删除。

如果用容器存指针,则容器销毁的时候,不会删除这些指针所指向的对象,因此必须先手工删除完毕之后,再销毁容器。

Q: 对由key得到的value对象,没有办法改变其中的数值吗??

例如下代码:

//srcfileAttribute.nIndex初始为0

CFileAttribute srcfileAttribute = m_mapKeyVsFile[“abc”];

srcfileAttribute.nIndex++;

但是再次CFileAttribute srcfileAttribute = m_mapKeyVsFile[“abc”];

发现这个srcfileAttribute.nIndex还是0;并没有变成1,

这是为什么呢??

难道说我不能这样直接改map里面的value值吗?必须删除重新insert一个??

A:srcfileAttribute = m_mapKeyVsFile[“abc”];此时srcfileAttrbute是通过map中值的拷贝构造函数构造的一个新的对象,这个副本的改变不影响map中的值,要改变map中的值可以直接m_mapKeyVsFile[“abc”].nIndex++;

如果用容器存副本,其存入、取出的过程是通过拷贝构造函数 和 赋值操作符来进行的。

关于STL:

STL(Standard Template Library)标准模板库,惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合。这里的“容器”和算法的集合指的是世界上很多聪明人很多年的杰作。STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件。STL现在是C++的一部分,因此不用额外安装什么。

PC官方
安卓官方手机版
IOS官方手机版

STL常见问题工具书截图

下载地址

STL常见问题工具书 2017 最新版

热门评论
最新评论
昵称:
表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲
字数: 0/500 (您的评论需要经过审核才能显示)

编辑推荐

本类软件必备

报错

请简要描述您遇到的错误,我们将尽快予以修正。

转帖到论坛
轮坛转帖HTML方式

轮坛转帖UBB方式