STL笔记
shayne000
这个作者很懒,什么都没留下…
展开
-
c++STL基础
C++ standard library:C++ 标准库STL (standard template library) :标准模板库 (C++标准库的主要部分)标准库以头文件形式呈现c++标准库的头文件可以不带副名(.h): #include <vector>新式的c头文件也可以不带副名(.h),前面加个字母c: #include<cstdio>旧时的c头文件...原创 2019-03-16 08:57:31 · 274 阅读 · 0 评论 -
STL::iterator迭代器
迭代器是一种泛化的指针。iterator遵循的原则:因为迭代器是算法连接容器的桥梁,算法通过迭代器操作容器实现算法的目标。所以算法有时需要去了解迭代器的特征(trait)来更好的使用迭代器。不同容器的迭代器都需要声明5个特征供算法查询:_List_iterator内的5个 特征声明:算法内获取迭代器特征的方法:当迭代器I是一个class时可以直接获取萃取机 traits:问题...原创 2019-03-17 08:41:44 · 229 阅读 · 0 评论 -
STL算法algorithm
STL算法部分主要由头文件,,组成。要使用 STL中的算法函数必须包含头文件,对于数值算法须包含,中则定义了一些模板类,用来声明函数对象。STL中算法大致分为四类:非可变序列算法:指不直接修改其所操作的容器内容的算法。可变序列算法:指可以修改它们所操作的容器内容的算法。排序算法:包括对序列进行排序和合并的算法、搜索算法以及有序序列上的集合操作。数值算法:对容器内容进行数值计算。查找...原创 2019-03-17 08:22:23 · 649 阅读 · 0 评论 -
STL::hashtable
hashtable是stl内一个非公开的类:其是c++11中新加入的unordered container容器的底部实现。包括: unordered_set, unordered_multiset, unordered_map, unordered_multimap.为了防止某个单向链表太长,当元素个数等于buckets vector长度时,buckets vector长度扩展为靠近...原创 2019-03-17 00:33:00 · 245 阅读 · 0 评论 -
STL::rb_tree红黑树以及set,map
红黑树是平衡二分搜索树。其元素排列规则有利于查找和插入。红黑树提供遍历操作及iterator,按照it++遍历能得到排序的状态。不应该使用iterator改变元素值,会打乱其排列规则。红黑树是set和map的底部支持。STL红黑树类(非公开容器)Key是键的类型,Value是值(key和data的结合)的类型 ,KeyOfValue是如何将key从value中取出(函数对象),...原创 2019-03-17 00:26:12 · 412 阅读 · 0 评论 -
STL::deque以及由其实现的queue和stack
deque双向队列,可在头尾插入和删除。存储方式:在内存中分段连续。其iterator的功劳:当迭代器指到一个buffer的边界时会进行判断,有能力跳入下一个或者前一个buffer,形成连续的假象(模拟连续储存)。GNU2.9 中deque模板含三个参数,允许指定buffer大小(GNU4.53以后不再允许)第三个参数为缓冲区大小,默认值为0表示使用预设值,若为n(n!=0)则表示每个...原创 2019-03-17 00:06:09 · 948 阅读 · 0 评论 -
STL::list源码及实现
GNU 2.9中:一个list中数据部分只含有一个名为node指向 __list_node<T>的指针。lsit在空间储存不连续,为了实现iterator的++等运算,将iterator设计为class而不仅仅是一个指针。iterator类内也含有一个名为node指向 __list_node的指针。该class要模拟指针,有大量的操作符重载(++,–,*,->等)。...原创 2019-03-16 23:43:48 · 739 阅读 · 0 评论 -
STL::vector源码及函数
vector是一种动态增长的数组。GNU 2.9一个vector中所含的数据为三根指针 start, finish, end_of_storage所以sizeof()一个vector值为12。(一个指针占4位)满足前闭后开区间原则,start指向第一个元素,finish指向最后一个元素的下一位。空间二倍增长:发生在添加元素时当finish==end_of_storage,利用辅助插入函...原创 2019-03-16 10:27:01 · 528 阅读 · 0 评论 -
STL::array
array定义对象时需要同时指定类型和长度。长度指定后不能改变。若指定长度为0则会默认改为1:array没有构造和析构函数。array直接使用指针当迭代器: ...原创 2019-03-16 10:11:51 · 532 阅读 · 0 评论 -
STL容器container
容器分类:序列式容器(array, vector, deque, list, forward-list),关联式容器(set/multiset, map/multimap,unordered containers)GNU2.9版中容器多写为一个单一的类模板,较为简明,容易理解。GNU4.9版中容器变成了有复杂继承和复合(包含)关系的类模板,不易理解。...原创 2019-03-16 09:58:57 · 565 阅读 · 0 评论 -
STL分配器allocator
分配器为为容器再内存中分配空间。容器的一般默认分配器是 std::allocator ,该分配器是一个类模板。对内存空间分配的动作(分配器,new,operator new()等)一般最后都会调用malloc() 。malloc() 再根据不同的操作系统调用其底层的API。同理释放内存对应的free()。malloc(size)分配的内存:除了要求的size意外malloc(size)还...原创 2019-03-16 09:46:10 · 737 阅读 · 0 评论 -
STL::iterator迭代器分类
1. 输入迭代器:只读,一次传递为输入迭代器预定义实现只有istream_iterator和istreambuf_iterator,用于从一个输入流istream中读取。一个输入迭代器仅能对它所选择的每个元素进行一次解析,它们只能向前移动。一个专门的构造函数定义了超越末尾的值。总是,输入迭代器可以对读操作的结果进行解析(对每个值仅解析一次),然后向前移动。2. 输出迭代器:只写,一次传递...原创 2019-03-17 09:03:00 · 238 阅读 · 0 评论