现在位置: 首页 > stl
2020-07-19 17:44 工业·编程 ⁄ 共 8302字 暂无评论
0 为什么需要hash_map 用过map吧?map提供一个很常用的功能,那就是提供key-value的存储和查找功能。例如,我要记录一个人名和相应的存储,而且随时增加,要快速查找和修改: 岳不群-华山派掌门人,人称君子剑 张三丰-武当掌门人,太极拳创始人 东方不败-第一高手,葵花宝典 ... 这些信息如果保存下来并不复杂,但是找起来比较麻烦。例如我要找"张三丰"的信息,最傻的方法就是取得所有的记录,然后按照名字一个一...
阅读全文
2019-12-26 18:43 工业·编程 ⁄ 共 5825字 暂无评论
一、STL中的内存管理 当我们new一个对象时,实际做了两件事情:(1)使用malloc申请了一块内存。(2)执行构造函数。在SGI中,这两步独立出了两个函数:allocate申请内存,construct调用构造函数。 这两个函数分别在<stl_alloc.h>和<stl_construct.h>中。 二、第一级配置器 第一级配置器以malloc(),free(),realloc()等C函数执行实际的内存配置、释放、重新配置等操作,并且能在内存需求不被满足的时候,调用一个...
阅读全文
2019-12-24 18:19 工业·编程 ⁄ 共 1365字 暂无评论
STL中的内存管理为两级配置器,一级配置器是当申请内存大于128B时候使用系统函数malloc/free进行申请释放。 二级配置器,将内存块分为大小间距为8的16个8B到128B的等长度的chunk,使用数组+链表管理。数组中存储的是大小相同的用链表链接起来的内存块。在STL中使用长度为16的数组,0处存储8Byte,然后依次16,24,36.....依次加8字节。二级配置器维护着一个内存池,如果所申请的内存块对应的数组的链表下为空,就向池中申请,如...
阅读全文
2019-06-04 11:22 工业·编程 ⁄ 共 14563字 暂无评论
1995年3月,Dr.Dobb's Journal特约记者, 著名技术书籍作家Al Stevens采访了STL创始人AlexanderStepanov. 这份访谈纪录是迄今为止对于STL发展历史的最完备介绍, 侯捷先生在他的STL有关文章里推荐大家阅读这篇文章. 因此我将该文全文翻译如下: Q: 您对于generic programming进行了长时间的研究, 请就此谈谈. A: 我开始考虑有关GP的问题是在7O年代末期, 当时我注意到有些算法并不依赖于数据结构的   特定实现,而只是依...
阅读全文
2018-12-24 19:55 工业·编程 ⁄ 共 2566字 暂无评论
Lists将元素按顺序储存在链表中. 与 向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢。 list的类模板声明为 template<class T, class Allocator=allocator<T>>class list; 与vector相同,list中的元素可以使任意型别的T,必须具备可设置和可复制两个属性,包括int、double、string以及结构体或其他自定义的类型。 与vector的不同有如下几点: 1、list不支持随机读取 2、list的插入与删除操作非常...
阅读全文
2018-12-22 19:50 工业·编程 ⁄ 共 1896字 暂无评论
1 基本操作 (1)头文件#include<vector>. (2)创建vector对象,vector<int> vec; (3)尾部插入数字:vec.push_back(a); (4)使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始的。 (5)使用迭代器访问元素. vector<int>::iterator it; for(it=vec.begin();it!=vec.end();it++) cout<<*it<<endl; (6)插入元素:    vec.insert(vec.begin()+i,a);在第i+1个元素前面插...
阅读全文
2018-10-20 12:19 工业·编程 ⁄ 共 3595字 暂无评论
map是C++ STL中的关联容器,存储的是键值对(key-value),可以通过key快速索引到value。map容器中的数据是自动排序的,其排序方式是严格的弱排序(stick weak ordering),即在判断Key1和Key2的大小时,使用“<”而不是“<=”。map 使用二叉搜索树实现,STL map的底层实现是红黑树。 map有几个值得注意的地方:map的赋值运算是深拷贝,即调用map_a = map_b后,map_a中的元素拥有独立的内存空间。map的[]运算比较有意思,当元...
阅读全文
2015-08-20 21:34 工业·编程 ⁄ 共 716字 暂无评论
正常的map默认按照key值排序,而map又没有像vector一样的sort()函数,那么如果将map按照value值排序呢?有两种方法: 方法1 将map中的key和value分别存放在一个pair类型的vector中,然后利用vector的sort函数排序,其中map_verb存放我的map值: 存放我的map值: #include<algorithm> typedef pair<string, int> PAIR; int cmp(const PAIR &x, const PAIR &y) { return x.second > y...
阅读全文
今天在完成一个功能模块时,遇到了一个很棘手的问题,大概是这样的: 主模块(EXE)的一个DLL中有一个函数FunA(),该函数需要查询数据库,得到记录集做处理,而数据库的操作又单独封装导出了一个DLL,由于记录集是变长的(不知道有多少记录),所以采用vector对象来传递数据。大概的过程如下: boolFunA_EXE() { vector<T> vecRet;        string  strSql = “SELECT * FROM .....”;  ...
阅读全文
2015-01-29 23:12 工业·编程 ⁄ 共 2191字 暂无评论
Qt 的信号槽和 Boost.Signals 由于有着截然不同的设计目标,因此二者的实现、强度也十分不同。将二者混合在一起使用也不是不可能的,我们将在本系统的最后一部分来讨论这个问题。 使用信号槽 信号槽是伟大的工具,但是如何能更好的使用它们?相比于直接函数调用,有三点值得我们的注意。一个信号槽的调用: 或许会比直接函数调用耗费更多的时间/空间; 可能不能使用 inline; 对于代码阅读者来说可能并不友好。 使用信号...
阅读全文