STL
文章平均质量分 57
Pokemon_Master
记录学习的点点滴滴
展开
-
STL(九)——算法(Algorithm)(二):copy
STL包含众多算法,不过很多算法实现其实很简单,看源码即可理解。但也有部分简单的函数,实现版本做了很多工作来加快效率,copy函数就是一个例子。我们挑sgi stl实现的copy函数作为例子谈一谈。 概述copy函数是调用比较频繁的函数,由于copy进行的是复制操作,而复制操作不外乎运用赋值运算符或复制构造函数实现,但有但元素拥有trivial assignment operato...原创 2018-09-12 11:31:32 · 209 阅读 · 0 评论 -
STL(十一)——sort
STL提供的各种算法里,sort()是最复杂庞大的一个。这个算法接受两个RandomAccessIterators(随机存取迭代器),然后将区间内的所有元素以渐增方式从小到大排序。STL的sort算法,数据量大时采用Quick Sort,分段递归排序。一旦分段后的数据量小于某个门槛,为避免Quick Sort的递归调用带来过大的额外负荷(overhead),就改用插入排序。如果递归层次太深,还...原创 2018-09-13 15:30:17 · 141 阅读 · 0 评论 -
STL(十)——remove算法
remove函数remove函数用于移除[first,last)之中所有与value相等都元素。这一算法并不真正从容器中删除元素,而是将每一个不与value相等的元素轮番赋值给first之后的空间。返回值forearditerator标示出重新整理后的最后元素的下一个位置。例如序列{0,1,0,2,0,3,0,4},如果我们执行remove(),希望移除所有0值元素,执行结果将是{1,2,3,...原创 2018-09-13 09:45:53 · 337 阅读 · 0 评论 -
STL(七)——hashtable(二):哈希函数
介绍STL里hashtable的使用例子:#include<hash_set>#include<iostream>using namespace std;int main(){ hashtable< int, //Value类型 hash<int>, //键值类型 ...原创 2018-09-11 10:04:15 · 515 阅读 · 0 评论 -
STL(一)——迭代器
迭代器(iterator)stl的思想是将算法和数据结构分开,而迭代器正是扮演了将他们分开的角色。不管数据结构如何,只要实现了相应的迭代器,就能够使用算法而无需顾及数据内部实现。 迭代器类型试想一下,让你为自己的数据结构设计访问接口,你会怎么设计?比如针对链表,只能单步访问;而针对数组,则可以进行跨步。不同的数据结构有不同的访问限制,由此就引入了不同类型的“接口”。迭代器考虑到了不...原创 2018-08-31 10:49:40 · 291 阅读 · 0 评论 -
STL(二)——vector
vector介绍vector和array相比有以下优点:1. 不用手动指定数组大小,更灵活2. vector有更高效的内存管理策略,更高效 vector一些注意点:1. 使用三个变量标记数组的头部Begin、尾部End和目前可用空间的尾部Memory_End。这三个标记可以简化代码,vector的begin()/end()/size()/capacity()可以很轻...原创 2018-09-03 16:05:37 · 91 阅读 · 0 评论 -
STL(三)——list
list介绍STL的list是一个双向链表,插入删除的复杂度为O(1),不像vector,list是有多少元素使用多少空间,不会存在浪费的情况。 list细节:1. list的迭代器不能像vector一样,以普通指针作为迭代器,因为双向链表的迭代器是双向迭代器,不是随机访问迭代器2. 和vector不一样,list的插入、删除等操作不会造成其他迭代器失效(但被操作的迭代器可能失...原创 2018-09-04 11:26:03 · 186 阅读 · 0 评论 -
STL(四)——deque
Deque概述vector是单向开口的连续线性空间,dequeue则是一种双向开口的局部连续线性空间。deque和vector最大的差异在于,deque允许常数时间内对头部进行插入或移除,二在于deque没有容量的观念,因为它是动态地以分段连续空间组合而成,随时可以增加一段新空间并连接起来。虽然deque也提供random access iterator,但迭代器并不像vector那样是普通指...原创 2018-09-05 16:24:15 · 239 阅读 · 0 评论 -
STL(五)——set/map/multiset/multimap概述
Set概述set的特性是,所有元素都会根据元素的键值自动被排序。set元素不允许两个元素有相同的键值。我们不能通过set的迭代器改变set的元素值,因为set的元素值关系到set的排列。而且set和list有相似的性质:当对它进行insert或者erase操作的时候,操作之前的所有迭代器和操作之后的其他迭代器,都不会失效,当然,被删除的迭代器会失效。因为set是用rb-tree实现的,所以...原创 2018-09-07 11:08:39 · 246 阅读 · 0 评论 -
STL(六)——hashtable(一):哈希介绍与部分STL实现
hashtable概述hashtable是一种以空间换时间的数据结构,哈希函数让hashtable在插入、删除、搜索等操作上有“常数平均时间”的表现,因此很受欢迎。 hashtable的冲突解决使用hash function会带来一个问题:可能有不同的元素被映射到相同的位置。有几种解决办法,我们一一介绍。一. 线性探测(linear——probing)当hash funct...原创 2018-09-10 16:07:51 · 323 阅读 · 0 评论 -
STL(八)——算法(Algorithm)(一)
算法概观STL算法是将最常被运用的算法规范出来,其涵盖的区间有可能在每五年一次的C++标准委员会中不断增订。广义而言,我们所写的每个程序都是一个算法,其中的每个函数也都是一个算法。STL收录了许多算法,包括排序,查找,排列组合等等的算法。STL为这些算法提供能泛化使用的版本。但要注意的是,特定的算法往往搭配特定的数据结构,例如RB-tree便是为了解决查找问题而提出的,本篇讨论的算法大多是独立...原创 2018-09-11 15:07:03 · 170 阅读 · 0 评论