
STL
文章平均质量分 55
小白起步
每天都要学到新东西
展开
-
SGI stl_config
SGI版的stl库中在stl_config.h头文件中定义了里面所需要使用的所有的宏.提供对不同版本不同编译器的支持根据编译器不同定义的宏 1. __STL_NO_BOOL 定义方式: #if !defined(_BOOL) #define __STL_NO_BOOL 在某些特定的编译器下会进行定义,如 # if defined(__SUNPRO_CC)原创 2017-04-07 15:48:28 · 312 阅读 · 0 评论 -
从零开始,打造自己的STL(四、list)
简述在前面我们看了vector的实现之后相信对容器有了一定的认识。容器即为存放物件之所,它代表着一块空间。想要直观的了解一个容器,那么看懂他的空间分配策略是一个非常有效的入手方式。接下来我们就来看看STL中的list又是如何实现的吧。list的结构list就是我们常说的链表,说到链表相信大家就很熟悉了。非连续空间、通过指针来连接每一个小空间、插入和删除都是O(1)操作,元素访问效率较低等等。。。原创 2018-04-23 15:27:49 · 383 阅读 · 0 评论 -
从零开始,打造自己的STL(三、alloc)
简述在stl中,所有的内存分配与释放都是交由allocator来实现的。在大部分情况下,我们都接触不到这里面的内容,因为它一直是隐藏在幕后悄悄的工作。 当然如果对于内存分配有特殊的要求的话,STL也提供了接口供我们使用自己的分配器 比如在vector的定义上template <typename _Tp, typename _Alloc = alloc > class vector : prote原创 2018-04-23 15:26:24 · 753 阅读 · 0 评论 -
从零开始,打造自己的STL(二、vector)
vector的内存布局以及操作方式与array非常的类似,都是一段连续的内存空间。两者之间唯一的差距就是空间运用的灵活性。array的空间在配置好了之后就无法更改,它所存放的数据量是固定的,一但空间不够用之后需要重新配置一块更大的空间。vector则不然,它的内存空间会随着元素的加入自动扩充新的空间供给使用,这样使用起来就不需要担心空间是否够用了。vector的内存结构vector采用了连续内存空间原创 2018-04-23 15:24:45 · 434 阅读 · 0 评论 -
一. 简述
简介对于每一个热爱c++的人来说,STL都是他们日常撸码、高效工作的必定会使用到的标准模板库。STL取用范型的思想,通过模板元编程,去掉了不同型别所带来的差异性,极大的提高了代码的复用性。既然STL如此强大与方便,我们当然要好好的学习它啊。仅仅停留在使用层面是是远远不够的,我们必须深入到代码内部,详细的了解它内部的工作原理。了解他不只是因为我们作为底层开发者不搞懂原理誓不罢休的精神,更是因为要更好的原创 2018-04-23 15:22:41 · 392 阅读 · 0 评论 -
STL算法(非变动型算法)
STL的算法大部分都包含在算法头文件algorithm中. 这篇主要是关于里面的非变动型算法,即不对容器的内容进行修改的算法. 在算法中要求传递进来的区间为一个前闭后开区间,否则最后一位会遍历不到,并且无法根据返回的last判断是否为想要的结果三个测试算法:template<class InputIterator, class UnaryPredicate> bool all_of(In原创 2017-04-15 16:27:35 · 312 阅读 · 0 评论 -
几种new的区别
1.operator new 2.new operator 3.placement new在SGI的STL实现中.空间的分配和对象的构造是分开的.我们平常使用的new会进行空间的分配同时会调用构造函数进行对象的构造 平常使用的new即为new operatoroperator new(size) 只进行空间的分配,不会调用构造函数,相当与mallocplacement new 调用此方法需要包原创 2017-04-04 16:50:27 · 369 阅读 · 0 评论 -
函数模板的特化
template<typename T> T max(T lhs, T rhs) { return lhs > rhs ? lhs : rhs; }int main() { max(1,2); max("a","b"); }该模板函数能够比较整型等数据类型的大小,,但是对于字符串,这种比较的方式就是错误的. 此时我们需要对该函数模板进行特化处理template<> cons原创 2017-04-03 15:27:39 · 536 阅读 · 0 评论 -
函数模板的使用
template<typename T> void swap(T &lhs, T &rhs) { T temp = lhs; lhs = rhs; rhs = temp; }int main() { int lhs = 10, rhs = 20; swap(lhs, rhs); return 0; }在我们使用函数模板时,不用指定里面的模板参数的类型,原创 2017-04-03 14:11:19 · 365 阅读 · 0 评论 -
模板的基础使用
template<typename T> class Demo { public: Demo(T val):val_(val){} private: T val_; };int main() { Demo<int> demo(1); }这是一个模板最基本的定义,其中T为我们定义的模板参数.它会根据我们传入的类型的不同而发生改变,如此时的T代表的就是int类型.. 模板在没有原创 2017-04-03 13:42:20 · 414 阅读 · 0 评论 -
模板编程的设计及作用
模板是什么模板是一个能产生代码的代码,它能够帮我们生成一些代码,减少我们的代码量.模板的设计关于牲口圈舍的设计: 面向过程的设计方式: 这种设计方式每种动物对应相应的圈舍.比较接近事实,但是代码量相对较大,难维护.且高度聚合,,在增添动物时需要为其增加圈舍,代码量会急剧增加. 面向对象的设计方式: 这种设计方式抽象出来一个基类,使得接口更加的简单,利用原创 2017-04-02 14:03:58 · 876 阅读 · 0 评论 -
从零开始,打造自己的STL(五、deque)
deque简介deque是双向开口的连续线性空间,支持内部元素的随机访问。看到这个概念,相信大家一定会想起vector,vector是单向开口的连续线性空间,内部元素也是可以随机访问的。deque的元素类似这样那么deque像比于vector的差异在哪里 deque的头部插入是vector没有的,虽然从技术角度来讲,vector实现头部插入也不是很难,但是效率太低,不值得且没必要 除了一些极端情况下原创 2018-04-23 15:29:09 · 294 阅读 · 0 评论