stl源码剖析
文章平均质量分 62
uestc-leon
我想做一个强者
展开
-
stl list原理和用法
List的节点template <class T>struct __list_node{typedef void* void_pointer; void_pointer next; //型别为void*,也可以设为__list_node<t>*void_pointer prev;T data;};List的迭代器在Vector中如果进行插入和删除操作后迭代器会失效,List有一个重要的原创 2017-08-02 14:16:03 · 811 阅读 · 0 评论 -
STL源码剖析---vector
vector容器概述 vector的数据安排以及操作方式,与array非常相似。两者的唯一区别在于空间的运用的灵活性。array是静态空间,一旦配置了就不能改变;要换个大(或小)一点的房子,可以,一切琐细都得由客户端自己来:首先配置一块新空间,然后将元素从旧址一一搬往新址,再把原来的空间释还给系统。vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。因此,转载 2017-07-27 00:08:25 · 371 阅读 · 0 评论 -
谨慎优化代码
看了本人前面关于“STL容器的删除元素问题”的博客后,相信大家对erase()函数的作用都已经有一定了解了,再使用的时候也会有所注意了,那么我们再看看下面的代码:[cpp] view plain copyvectorint> vec(5); //插入数据 vec[0] = 0; vec[1] = 1; vec[2] =转载 2017-07-26 22:09:48 · 196 阅读 · 0 评论 -
STL容器的删除元素问题
STL的容器分为两类,一类是序列式容器,即数据顺序连续存储,如:vector、deque;另一类是关联式容器,即数据不连续存储,如:map、list、set。对于STL容器的数据删除操作,有一些需要注意的地方。1、序列式容器的数据删除 下面例子以容器list为例:[cpp] view plain copyfor (list转载 2017-07-26 22:05:08 · 244 阅读 · 0 评论 -
STL容器vector的内存问题
在STL的容器中,vector可以说是最容易理解和使用的容器了,以前使用数组的时候,如果不确定有多少数据要存储,就会预先分配一个大的数组,如果实际没有用到那么多,又会浪费很多的内存资源,如果不分配大的数组又担心不够用,有了vector之后,这些问题再也不用担心了,vector会动态的增长空间,当vector空间不足时会自动申请一片更大的内存空间,以存储新的数据。 vector动态内转载 2017-07-26 21:52:33 · 536 阅读 · 0 评论 -
判断STL list是否为空的小技巧
在STL中,list是一个双向循环链表,所谓循环链表就是指链表的头部和尾部是连接在一起的,下面两段代码实现的功能是一样的,但是执行过程却有所不同:[cpp] view plain copy//第一种 listint> lst1; if (lst1.empty()) { //do something }转载 2017-07-26 20:32:03 · 2471 阅读 · 0 评论 -
STL容器vector的下标运算符[]
对于容器vector,[]操作符的作用是获取相应位置上的值,有的时候使用不当就会造成问题,请看下面例子:[cpp] view plain copyvectorint> vec; cout 上面的代码会出现Segmentation fault (core dumped),这是因为vec里面没有元素,还没有分配内存空间以存储转载 2017-07-26 20:27:46 · 1036 阅读 · 0 评论 -
STL容器map的下标运算符[]
在STL中,map是一个关联式容器,它提供一对一的数据处理能力,即其中每一个元素都是一个键值对,通过一个唯一的关键字,可以唯一映射到对应的数据值。而map中重载了下标运算符[],通过下标操作,开发人员可以很方便地根据关键字获取到对应的值。虽然使用方便,但是还是有一些地方容易出现问题,值得大家的注意。 下面代码的输出结果会什么呢?[cpp] view pl转载 2017-07-26 20:25:09 · 425 阅读 · 0 评论 -
string容易忽略的一些问题
在使用C的char*字符串时,我们常常会纠结以下的一些问题:分配的char*数组空间是否足够如何获取char*字符串的长度如何拼接两个char*字符串 可以说,string的出现,大家再也不用烦恼上面的一些问题了,string是一个类,里面封装了很多常用的操作函数以及成员变量,基本上可以满足我们绝大部分的字符串操作的需要。但是在使用string的过程中,还是有一些点需要注转载 2017-07-26 20:13:16 · 262 阅读 · 0 评论 -
traits编程技术
之前已经介绍过迭代器,知道了不同的数据结构都有自己专属的迭代器,不同的迭代器也有不同的特性,由于算法的接口是统一的,通过迭代器的不同属性,算法自动选择正确的执行流程,在完全任务的同时,也尽可能提高算法的执行效率。那算法如何获知迭代器的属性呢?这一光荣的任务就是traits完成的。在STL实现中,traits编程技术得到大量的运用,它利用了“内嵌类型”的编程技巧与C++的template参数推导功能转载 2017-07-26 16:07:42 · 356 阅读 · 0 评论 -
迭代器
一、迭代器作用 在设计模式中有一种模式叫迭代器模式,简单来说就是提供一种方法,在不需要暴露某个容器的内部表现形式情况下,使之能依次访问该容器中的各个元素,这种设计思维在STL中得到了广泛的应用,是STL的关键所在,通过迭代器,容器和算法可以有机的粘合在一起,只要对算法给予不同的迭代器,就可以对不同容器进行相同的操作。在这里提到了一个叫迭代器的东西,说得简单一点,就是一种转载 2017-07-26 15:32:37 · 241 阅读 · 0 评论 -
STL容器学习总结
本文主要讨论C++标准库中的顺序容器及相应的容器适配器,这些内容主要涉及顺序容器类型:vector、list、deque,顺序容器适配器类型:stack、queue、priority_queue。 标准库中的容器分为顺序容器和关联容器。顺序容器(sequential container)内的元素按其位置存储和访问,顾名思义,这些内部元素是顺序存放的;顺序容器内的元素排列次序与元素值无转载 2017-07-27 00:11:28 · 186 阅读 · 0 评论