STL容器
文章平均质量分 71
丿咫尺天涯
这个作者很懒,什么都没留下…
展开
-
标准模板库(STL)使用入门(上)
标准模板库(STL)使用入门(上)或许你已经把 C++ 作为主要的编程语言用来解决 TopCoder 上的问题。这意味着你已经简单使用过了 STL,因为数组和字符串都是作为 STL 对象传递给函数。也许你已经注意到了,很多程序员写代码比你快得多,也更简洁。或许你还不是但想成为一名 C++ 程序猿,因为这种编程语言功能很强大还有丰富的库(也许是因为在 TopCoder 的练习转载 2015-06-30 20:17:47 · 755 阅读 · 0 评论 -
C++ STL 中的 bitset 用法
#include #include int main() { std::bitset bs(8); std::cout "输出所有binary bit: " std::cout "bitset - any() 是否存在置为1的bit: " std::cout "bitset - none() 是否不存在置为 1 的bit: " std::c转载 2015-08-26 10:55:17 · 513 阅读 · 0 评论 -
vector的clear操作的内部过程
最近在论坛看到一个提问帖子,问题是vector中存储了对象的指针,调用clear后这些指针如何删除?[cpp] view plaincopyclass Test { public: Test() {} ~Test() { cout "Test des" }; int main()转载 2015-08-11 12:38:17 · 1966 阅读 · 0 评论 -
STL-----线程安全
由于STL不是线程安全的, 所以在每一次插入元素,删除元素,读取元素时,必须保证原子操作. 读取元素也许要原子? 嗯,是的. 因为你得到了一个迭代器后, 这个迭代器对应的容器可能被别的线程修改!所以(下面来自> 条款十二): 1)在每次调用容器的成员函数期间都要锁定该容器。 2)在每个容器返回的迭代器(例如通过调用begin或end)的生存期之内都要锁定该容器。 3)在每转载 2015-07-30 09:19:47 · 1474 阅读 · 0 评论 -
STL源码剖析----list
相较于vector的连续线性空间,list就显得复杂许多,它的好处是每次插入或删除一个元素,就配置或释放一个元素空间。因此,list对于空间的运用有绝对的精准,一点也不浪费。而且,对于任何位置的元素插入或元素移除,list永远是常数时间。 list不仅是一个双向链表,而且还是一个环状双向链表。另外,还有一个重要性质,插入操作和接合操作都不会造成原有的list迭代器失效,这在vecto原创 2015-07-13 12:04:56 · 346 阅读 · 0 评论 -
STL源码剖析----vector
vector容器概述 vector的数据安排以及操作方式,与array非常相似。两者的唯一区别在于空间的运用的灵活性。array是静态空间,一旦配置了就不能改变;要换个大(或小)一点的房子,可以,一切琐细都得由客户端自己来:首先配置一块新空间,然后将元素从旧址一一搬往新址,再把原来的空间释还给系统。vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。因此,原创 2015-07-13 12:02:38 · 484 阅读 · 0 评论 -
标准模板库(STL)使用入门(下)
利用 map 创建 vector正如你所知,map实际上包含的是元素对。因此你可以这样写:1234mapint> M; // ... vector< pair<string,int> > V(all(M));// remember all(c) stands for (c).begin(),(c).e转载 2015-08-10 10:36:13 · 603 阅读 · 0 评论 -
STL源码剖析----算法、仿函数、配接器
一、STL中的算法1. sort这个算法接收两个随机存取迭代器,所以vector、deque可以用。而list迭代器属于只双向迭代器。 数据量大时采用QuickSort,分段递归排序,一旦分段后的数据量小于某个门槛,则采用insertSort。 SGI STL用的introSort来替代常规的QuickSort,这两者的区别就是在选择轴值时,introSort选用三点中的中原创 2015-07-13 16:26:30 · 665 阅读 · 0 评论 -
STL源码剖析---红黑树原理下
算法导论书上给出的红黑树的性质如下,跟STL源码剖析书上面的4条性质大同小异。 1、每个结点或是红色的,或是黑色的 2、根节点是黑色的 3、每个叶结点(NIL)是黑色的 4、如果一个节点是红色的,则它的两个儿子都是黑色的。 5、对于每个结点,从该结点到其子孙结点的所有路径上包含相同数目的黑色结点。 从红黑树上删除一原创 2015-07-13 14:37:34 · 426 阅读 · 0 评论 -
STL源码剖析---迭代器
一、迭代器迭代器五种相应型别:1. valuetype,是指迭代器所指对象的型别。2. differencetype,用来表示迭代器之间的距离,可以用来表示一个容器的最大容量。例如STL中的count()函数,其返回值就是difference type。3. referencetype,在C++中如果要传回左值都是以by reference的方式进行。4. pointertyp原创 2015-07-13 12:00:54 · 406 阅读 · 0 评论 -
STL源码剖析-----关联式容器
一、set 所有元素都会根据元素的键值自动排序,set元素不像map那样可以同时拥有key和value,set元素的键值就是实值,set不允许有两个相同元素的键值。二、map 所有元素都会根据元素的键值自动排序,map不允许有两个元素有相同的键值。以红黑树作为底层机制,每一个节点上的内容是一个pair,pair的第一个元素是键值,第二个元素为实值。原创 2015-07-13 15:05:24 · 393 阅读 · 0 评论 -
STL源码剖析------迭代器失效总结
vector: 为了使vector容器实现快速的内存分配,实际分配的容器会比当前所需的空间多一些,vector容器预留了这些额外的存储区,用来存放新添加的元素,而不需要每次都重新分配新的存储空间。你可以从vector里实现capacity和reserve成员可以看出这种机制。 vector迭代器的几种失效的情况: 1、当插入(push_back)一个元素后,end操作返回的迭代器原创 2015-07-13 15:03:23 · 442 阅读 · 0 评论 -
STL源码剖析-----红黑树原理
一、红黑树概述 红黑树和我们以前学过的AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。不过自从红黑树出来后,AVL树就被放到了博物馆里,据说是红黑树有更好的效率,更高的统计性能。这一点在我们了解了红黑树的实现原理后,就会有更加深切的体会。 红黑树和AVL树的区别在于它使用颜色来标识结点的高度,它所追求的是局部平衡而不是AVL原创 2015-07-13 14:35:58 · 490 阅读 · 0 评论 -
STL源码剖析----deque
一、deque的中控器 deque是连续空间(至少逻辑上看来如此),连续线性空间总令我们联想到array或vector。array无法成长,vector虽可成长,却只能向尾端成长,而且其所谓的成长原是个假象,事实上是(1)另觅更大空间;(2)将原数据复制过去;(3)释放原空间三部曲。如果不是vector每次配置新空间时都有留下一些余裕,其成长假象所带来的代价将是相当高昂。原创 2015-07-13 14:31:45 · 532 阅读 · 0 评论 -
STL源码剖析----空间配置器
对new和delete的理解,分为两步,第一步内存的配置,第二步调用对象构造函数。当申请的空间大于128字节时,调用第一级配置器,第一级配置器没有用operator::new和operator::delete来申请空间,而是直接用malloc/free和realloc,并且实现了c++中类似的new-handler的机制。 当区块小于128字节时,则以内存池管理,此法又称为次层配置原创 2015-07-13 11:56:45 · 340 阅读 · 0 评论 -
STL源码剖析----stack、heap、queue
一、 stack 先进后出的特性,deque是双向开口的数据结构,若以deque为底部结构并封闭其头端开口,便轻而易举的形成了一个stack。SGI STL便以deque作为缺省情况下stack的底部结构。这种“修改某物接口,形成另一种风貌”之性质这,称为adapter(配接器)模式。stack没有迭代器。以list作为stack的底层容器。二、queue先进先出的数据原创 2015-07-13 14:33:31 · 426 阅读 · 0 评论 -
STL面试
1.C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作。vector封装数组,list封装了链表,map和set封装了二叉树等2.标准关联容器set, multiset, map, multimap内部采用的就是一种非常高效的平衡检索二叉转载 2015-05-28 10:38:06 · 764 阅读 · 0 评论