![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++ STL
爱吃红萝卜的小白兔
这个作者很懒,什么都没留下…
展开
-
STL 一级配置器
一,一级配置器原创 2017-05-15 13:58:29 · 301 阅读 · 0 评论 -
C++ 泛型思想
一,为什么要引入泛型?泛型就是参数化类型,类型的参数化,就是可以把类型像函数的参数那样传递。这一点意义非凡。1,泛型使编译器可以在编译期间对类型进行检查以提高类型安全,减少运行时由于对象类型不匹配引发的异常要理解为什么引入泛型,就要知道没有使用泛型带来的问题。现在的程序开发都是面向对象的,所以程序里会有很多各种类型的对象,对象需要有某种类型的容器来存储。因为程序员可能把任何类型的对原创 2017-08-16 10:52:41 · 505 阅读 · 0 评论 -
STL 迭代器删除,插入元素发生的事情
一,序列式容器对于序列式容器(vector、list、deque),删除当前的iterator会使后面所有元素的iterator都失效。这是因为vector,deque使用了连续分配的内存,删除一个元素导致后面所有的元素会向前移动一个位置。使用erase方法后,返回的是下一个有效的iterator。例如:vector val = { 1,2,3,4,5,6 }; vector::ite原创 2017-07-29 15:10:43 · 2443 阅读 · 2 评论 -
STL 算法
一,算法的泛化过程算法的泛型化过程,考虑的是如何将算法独立于要处理的数据结构,即如何设计一个算法,可以把它用于任何数据结构(vector,list,set,map)。要做到这一点,把要操作的数据结构的类别加以抽象化,把操作的数据结构的标示法和区间目标的移动行为抽象化,整个算法也就在一个抽象层面上工作了,整个过程称为算法的泛型化。实现算法泛型化的关键就是使用迭代器,迭代器作为算法与容器之间的一个原创 2017-07-31 12:04:13 · 202 阅读 · 0 评论 -
deque
一,deque概述vector是单向开口的连续线性空间,deque则是双向开口的连续线性空间。所谓双向开口,就是可以在头尾两端都可以进行元素的插入与删除操作。vector也可以在头部进行元素的插入删除操作,但是在头部的操作的效率非常的差。二,vector与deque的差异1,deque允许在常数时间对头部进行元素的插入与删除操作。2,deque没有容量的概念,因为它是以原创 2017-08-02 15:41:17 · 268 阅读 · 0 评论 -
list
一,list的内存空间vector使用的是连续的内存空间,list使用的是离散的内存空间。每当往list中插入一个元素,就会为这个元素分配一块内存空间,不同的元素的内存空间通过指针链接在一起。因此,list对内存空间的运用非常精准,一点也不浪费,而且对于任何位置的插入与删除操作,list永远是常数时间。二,list的迭代器list不能像vector那样以普通的指针作为迭代器原创 2017-08-02 09:34:53 · 394 阅读 · 0 评论 -
vector
一,vector与array之间的区别vector与array非常的相似,两者唯一的差别在于内存空间的使用。array是静态空间,一旦配置就不能改变;vector是动态空间,随着元素的加入,它会动态的扩充自己的内存空间。实现vector的关键技术,就是对其占用的内存空间的控制以及重新配置时元素移动效率。二,vector的迭代器vector的底层是用一段连续的内存空间来存储容器中原创 2017-08-02 09:06:02 · 489 阅读 · 0 评论 -
STL 二级配置器
一,二级配置器的源代码enum{_ALIGN = 8}; //小型区块的上调边界enum{_MAX_BYTES = 128}; //小型区块的上界enum{_NFREELISTS = _MAX_BYTES/_ALIGN}; //free-lists 个数/*** 第一个参数用于多线程环境,第二个参数完全没原创 2017-05-19 08:49:25 · 334 阅读 · 0 评论 -
map
一,有关map的操作1,初始化操作map myMap;myMap["messi"] = 1;myMap["jams"] = 2;myMap["jack"] = 3;2,插入操作pair value("json", 4);myMap.insert(value);3,输出集合中的元素for(map::iterator iter = myMap.begin原创 2017-07-31 10:28:02 · 628 阅读 · 0 评论 -
set
一,有关set的基本操作1,初始化操作//1,定义一个空的setset mySet1;//2,使用数组初始化int nums[] = {4, 3, 2, 1};set mySet2(nums, nums + 4);2,插入操作//1,直接插入值mySet2.insert(7);//2,在指定的位置插入一个值set::iterator iter = mySe原创 2017-07-29 16:29:06 · 223 阅读 · 0 评论 -
STL 迭代器
一,迭代器迭代器是一种行为类似于指针的对象,指针最常用的操作是解除引用与成员访问,因此迭代器的最重要的工作就是对operator*与operator->进行重载。迭代器提供了一种方法可以顺序访问容器中的各个元素,而又不暴露该容器的内部实现,为遍历不同的容器提供了一个统一的接口。二,迭代器的类型1,输入迭代器输入是从"程序"的角度来讲的,即来自容器的信息被视为输入。输入迭原创 2017-07-15 10:46:33 · 329 阅读 · 0 评论