stl
文章平均质量分 79
dwx2046
这个作者很懒,什么都没留下…
展开
-
STL源码剖析——空间配置器
前言 SGI STL源码下载地址 空间配置是为存储数据提供可用的空间,在Standard Template Library(STL)中,空间配置是最底层的东西,为容器提供服务。在C++中,一般管理内存分配是使用new和delete进行操作,这两个操作都需要经过两个步骤;new操作的步骤:(1)调用::operator new配置内存;(2)调用对象的构造函数转载 2016-03-18 14:08:44 · 379 阅读 · 0 评论 -
关于外部模板的理解
在标准C++中,只要在编译单元内遇到被完整定义的模板,编译器都必须将其实例化(instantiate)。这会大大增加编译时间,特别是模板在许多编译单元内使用相同的参数实例化。看下面的例子://function.htemplate void fun(T t){}//test1.cppvoid test1(){ fun(1);}//test2.cppvoid test2(){原创 2016-04-22 21:34:07 · 878 阅读 · 0 评论 -
《Effective STL》学习笔记(第四部分)
http://dongxicheng.org/cpp/effective-stl-part4/6、仿函数、仿函数类、函数等函数和类似函数的对象——仿函数——遍布STL。关联容器使用它们来使元素保持有 序;find_if使用它们来控制它们的行为;如果缺少它们,那么比如for_each和transform这样的组件就没有意义了;此外,not1和 bind2nd这样的适配器会积极地产转载 2016-04-09 21:32:50 · 431 阅读 · 0 评论 -
《Effective STL》学习笔记(第三部分)
4、 迭代器标准STL容器提供了四种不同的迭代器:iterator、const_iterator、reverse_iterator和const_reverse_iterator为什么有四种迭代器?它们之间的关系是什么?它们可以互相转化吗?在调用算法和STL实用函数时不同类型可以混合使用吗?这些类型是怎么关联到容器和它们的成员函数的?本章回答了这些问题,同时介绍了一个比通常更值得注意转载 2016-04-09 21:30:48 · 366 阅读 · 0 评论 -
《Effective STL》学习笔记(第二部分)
http://dongxicheng.org/cpp/effective-stl-part2/2、 vector和string所 有的STL容器都很有用,但是相比于其他容器,vector和string更常用。本章从多个角度覆盖vector和string,如:为什么提倡使用 vector代替数组,怎样改进vector和string的性能?怎样除去过剩的内存,vector是个什转载 2016-04-09 21:29:43 · 353 阅读 · 0 评论 -
《Effective STL》学习笔记(第一部分)
本书从STL应用出发,介绍了在项目中应该怎样正确高效的使用STL。本书共有7个小节50个条款,分别为(1) 容器:占12个条款,主要介绍了所有容器的共同指导法则(2) vector和string:占6个条款,介绍了最常用的两种容器的一些使用经验(3) 关联容器:占7个条款,介绍了关联容器(*map,*set)的使用经验(4) 迭代器:占12个条款,介绍了迭代转载 2016-04-09 19:59:29 · 371 阅读 · 0 评论 -
C++标准库之mutex
互斥锁有可重入、不可重入之分。C++标准库中用mutex表示不可重入的互斥锁,用recursive_mutex表示可重入的互斥锁。为这两个类增加根据时间来阻塞线程的能力,就又有了两个新的互斥锁:timed_mutex(不可重入的锁)、recursive_timed_mutex(可重入的锁)。互斥锁单独使用时主要是为了使对共享资源的互斥使用,即同时只能有一个线程使用,以防止同时使用可能造成的转载 2016-04-06 15:44:04 · 1352 阅读 · 0 评论 -
什么时候需要用hash_map,什么时候需要用map?
大家都知道在C++的STL中map是使用树来做查找算法,而hash_map使用hash表来排列配对,是使用关键字来计算表位置。那使用起来他们的差别主要是什么呢?对于性能差别是什么,适合什么情况下应用呢?于是我对它们进行了一些测试,并记录了测试数据供大家分享。 测试的内容主要是map和hash_map的添加、删除、查找和遍历操作,首先进行了几组测试,分别是10万次、30万次,时间单位均为毫转载 2016-03-20 16:07:44 · 4231 阅读 · 3 评论 -
vector迭代器失效场景
vector迭代器失效场景push_back(vlaue) 操作导致vector发生内存重分配,所有迭代器失效(不是必然)。vectorint> vec = { 1, 2, 3, 4 };//size:4 capacity:4auto iter = vec.begin();vec.push_back(5); //size:5 capacity:8cout转载 2016-03-20 14:59:33 · 1751 阅读 · 0 评论 -
探索C++0x: 1. 静态断言(static_assert)
转载请注明来源:http://blog.csdn.net/thesys/archive/2010/06/02/5641350.aspx简介C++0x中引入了static_assert这个关键字,用来做编译期间的断言,因此叫做静态断言。其语法很简单:static_assert(常量表达式,提示字符串)。如果第一个参数常量表达式的值为真(true或者非零值),那么sta转载 2016-03-20 14:09:31 · 361 阅读 · 0 评论 -
std::forward(expr)参数推导
对于forward,其boost的实现基本可以等价于这样的形式:template typename T>T&& forward(typename remove_referenceT>::type& param){ return static_castT&&>(param);}那么这里面是如何达到完美转发的呢?举一个栗子templa转载 2016-03-20 14:06:04 · 495 阅读 · 0 评论 -
C++11尝鲜:std::move和std::forward源码分析
http://blog.csdn.net/zwvista/article/details/6848582std::move和std::forward是C++0x中新增的标准库函数,分别用于实现移动语义和完美转发。下面让我们分析一下这两个函数在gcc4.6中的具体实现。预备知识引用折叠规则:X& + & => X&X&& + & => X&X& + && =>转载 2016-03-20 11:21:46 · 394 阅读 · 0 评论 -
C++11中的Move语义和右值引用
http://www.cnblogs.com/520zijuan/archive/2013/02/04/2891948.html郑重声明:本文是笔者网上翻译原文,部分有做添加说明,所有权归原文作者!地址:http://www.cprogramming.com/c++11/rvalue-references-and-move-semantics-in-c++11.html转载 2016-03-19 22:54:18 · 596 阅读 · 0 评论 -
STL源码剖析——序列容器之list
前言 在SGI STL中,list容器是一个循环的双向链表,它的内存空间效率较前文介绍的vector容器高。因为vector容器的内存空间是连续存储的,且在分配内存空间时,会分配额外的可用空间;而list容器的内存空间不一定是连续存储,内存之间是采用迭代器或节点指针进行连接,并且在插入或删除数据节点时,就配置或释放一个数据节点,并不会分配额外的内存空间,这两个操作过程都是常数时间。转载 2016-03-19 19:57:20 · 676 阅读 · 0 评论 -
STL源码剖析——序列容器之vector
http://blog.csdn.net/chenhanzhun/article/details/39287983前言 在STL编程中,我们最常用到的就是容器,容器可分为序列容器和关联容器;本文记录的是我们经常使用的序列容器之vector,vector的数据安排和操作方式类似于C++内置数组类型array,唯一的区别就是在于空间的灵活运用。内置数组array是静态空间,一转载 2016-03-19 16:30:10 · 542 阅读 · 0 评论 -
vector利用swap()函数进行内存的释放
http://blog.csdn.net/jerryjbiao/article/details/7389233相信大家看到swap这个词都一定不会感到陌生,甚至会有这样想法:这不就是简单的元素交换嘛。的确,swap交换函数是仅次于Hello word这样老得不能老的词,然而,泛型算法东风,这个小小的玩意儿却在C++ STL中散发着无穷的魅力。本文不仅详细地阐述STL泛型算法swap,并借助转载 2016-03-19 16:07:36 · 826 阅读 · 0 评论 -
vector.resize 与 vector.reserve的区别
http://www.cnblogs.com/kex1n/archive/2012/05/22/2512789.htmlstd::vector的reserve和resize的区别1. reserve: 分配空间,更改capacity但不改变size2. resize: 分配空间,更改capacity也改变size如果知道vector的大小,resize一下可以当数组来用转载 2016-03-19 15:32:08 · 387 阅读 · 0 评论 -
STL源码剖析——迭代器
http://blog.csdn.net/chenhanzhun/article/details/39234077前言 在STL的思想中,容器和算法是彼此独立设计的,再通过某种方式使它们连接;而迭代器是使算法独立于使用的容器类型,即迭代器是连接算法和容器的方法。由于迭代器是一种行为类似指针的对象,也就说迭代器是一种广义指针,即迭代器对解除引用操作(operator*)和访问成转载 2016-03-18 15:21:41 · 571 阅读 · 0 评论 -
SGI STL sort()源码分析
首先将stl sort完整源码列如下所示:template inline void sort(_RandomAccessIter __first, _RandomAccessIter __last) { __STL_REQUIRES(_RandomAccessIter, _Mutable_RandomAccessIterator); __STL_REQUIRES(typename i原创 2017-07-09 22:45:27 · 788 阅读 · 0 评论