
C++语言基础——STL
Alex_McAvoy
想要成为渔夫的猎手
展开
-
C++语言基础 —— STL —— 容器与迭代器
【概述】STL 是指 C++ 标准模板库,是 C++ 语言标准中的重要组成部分,其以模板类和模版函数的形式提供了各种数据结构与算法的精巧实现,如果能充分使用 STL,可以在代码空间、执行时间、编码效率上得到极大的提高。STL 大致可以分为三大类:容器(Container)、迭代器(iterator)、算法(algorithm)。STL 容器是一些模板类,提供了多种组织数据的常用方法,例...原创 2019-03-25 20:01:51 · 1021 阅读 · 0 评论 -
C++语言基础 —— STL —— 算法
【概述】STL 是指 C++ 标准模板库,是 C++ 语言标准中的重要组成部分,其以模板类和模版函数的形式提供了各种数据结构与算法的精巧实现,如果能充分使用 STL,可以在代码空间、执行时间、编码效率上得到极大的提高。STL 大致可以分为三大类:容器(Container)、迭代器(iterator)、算法(algorithm)。STL 容器是一些模板类,提供了多种组织数据的常用方法,例...原创 2019-03-25 20:17:37 · 657 阅读 · 0 评论 -
C++ 语言基础 —— STL —— 算法 —— 二分查找算法
STL 中,在 <algorithm> 头文件里提供了两个利用二分查找的方法在一个排好序的数组中进行查找。在一个从小到大的排好序的数组中:lower_bound(begin,end,num):从数组的 begin 位置到 end-1 位置二分查找第一个大于等于 num 的数字,找到返回该数字的地址,不存在则返回 end upper_bound( begin,end,num):...原创 2019-02-11 20:09:20 · 824 阅读 · 0 评论 -
C++语言基础 —— STL —— 算法 —— nth_element() 的使用
nth_element() 函数位于<algorithm> 头文件中,其作用是求容器中第 k大的元素并将其放在 k-1 的位置上(下标从 0 开始计数)其内部是以分治思想实现的,以数组 a[n] 为例,其元素区间为 [0,n-1],经过 nth_element() 函数排序后,区间 a[0,k) 的数一定都小于 a[k],区间 (k,n-1] 的数都大于 k,但在区间a[0,...原创 2019-01-25 18:35:10 · 826 阅读 · 0 评论 -
C++语言基础 —— STL —— 算法 —— unique() 的使用
unique() 位于 <algorithm> 头文件中,其作用是元素去重,即删除序列中所有相邻的重复元素。其删除元素,只是一个伪去除,只是重新排列了序列中的元素,将相邻的重复元素添加到容器末尾,简单来说,使用 unique() 后,容器的长度没有变,只是元素顺序改变了。其返回值是去重之后的尾地址,如下,减去数组 a 的起始地址后所得到的就是 a 中去重后的元素个数。in...原创 2019-01-18 21:49:17 · 444 阅读 · 0 评论 -
C++语言基础 —— STL —— 算法 —— 排列组合算法
【概述】首先要了解什么是 “下一个” 排列组合,什么是 “上一个” 排列组合。假设有三个数字组成的序列:{a,b,c}则这个序列有6种可能的排列组合:abc、acb、bac、bca、cab、cba上述的排列组合是根据 less-than 操作符做字典顺序的排序,即:abc 处于第一,每一个元素都小于其后的元素,而 acb 是次一个排列组合,它是固定了序列内最小元素( a )之后所做...原创 2018-08-16 16:31:27 · 3317 阅读 · 1 评论 -
C++语言基础 —— STL —— 容器与迭代器 —— list 与 deque
【概述】list 与 deque 是在程序设计中会用到的数据容器,STL提供了方便的链表、双端队列的实现,准确地说,STL 中的 list 与 deque不同于 pair、vector 等容器,而是对列表和双端队列这两个数据结构的重新包装。【list 的使用】list 定义在 <list> 头文件中,其提供了双链表的全部功能,即是一个线性链表结构,无需分配内存且可任意伸...原创 2019-01-13 15:49:31 · 438 阅读 · 0 评论 -
C++语言基础 —— STL —— 容器与迭代器 —— map 与 multimap
【概述】map 和 multimap是映射数据容器,两者均定义与 <map> 头文件中,其所有元素都是 pair,pair 的第一个元素被视为键值,第二个元素为实值。他们是基于某一类型 Key 的键集的存在,提供对 TYPE 类型的数据进行快速和高效的检索,具体实现采用了一颗红黑树的平衡二叉树的数据结构,这颗树具有对数据自动排序的功能,所以在 map 内部所有的数据 Key ...原创 2019-01-13 20:42:37 · 716 阅读 · 0 评论 -
C++语言基础 —— STL —— 容器与迭代器 —— heap
【概述】在 STL 中,并没有将堆作为一种容器,其实现需要借助更低一层的容器组件作为其底层机制,比如:list、priority_queue 等,heap 的底层机制 vector 本身就是一个类模板,heap 基于 vector 便实现了对各种数据类型的操作。heap 是一个类属算法,其包含在头文件 <algorithm> 中,在 STL 中,heap 被默认调整成为小根堆,...原创 2019-06-30 21:29:28 · 400 阅读 · 0 评论 -
C++语言基础 —— STL —— 容器与迭代器 —— pair
【概述】pair 是定义在 <utility> 头文件中的一个简单的模板类,常用于表示一个二元组或元素对,且其提供了按照字典序对元素对进行大小比较的比较运算符模版函数。定义:pair<T1,T2> pairName参数:T1 是第一个值的数据类型,T2 是第二个值的数据类型。【构造与访问】pair<T1,T2> p:构造一个空 pair,其...原创 2019-01-12 21:44:04 · 1029 阅读 · 0 评论 -
C++语言基础 —— STL —— 容器与迭代器 —— vector
【概述】vector 是定义在 <vector> 头文件中的向量容器模版类,其以连续数组的方式存储元素序列,可以将 vector 看作是以顺序结构实现的线性表。当在程序中需要使用动态数组时,vector 是一个理想的选择,其在使用过程中动态地增长存储空间,存取任何元素都能在参数时间内完成,但若在结尾插入,效率比较高,若往中间某个位置插入,则其插入位置后的元素都要后移,效率相对较...原创 2019-01-13 15:04:21 · 554 阅读 · 0 评论 -
C++语言基础 —— STL —— 容器与迭代器 —— bitset
【概述】bitset 位于 <bitset> 头文件中,其是 STL 的一部分,准确地说,bitset 是一个模板类而不是容器,其模板参数不是类型,而整型的数值,即:bitset <N>bitset 存储的是二进制位,与一个 bool 型的数组相似,其每位只占一个字节,极大的优化了空间,使用 bitset 可以像使用数组一样利用位。【定义】bitset 的...原创 2019-05-31 16:19:37 · 657 阅读 · 0 评论 -
C++语言基础 —— STL —— 容器与迭代器 —— set 与 multiset
【概述】set 和 multiset是集合数据容器,通过链表进行组织,具体实现采用了红黑树的平衡二叉树的数据结构,两者均定义在 <set> 头文件中,其会根据特定的规则,自动将元素排序。两者不同在于,set 不允许元素重复,而 multiset 允许元素重复。在插入操作和删除操作上比 vector 快,但查找或添加末尾的元素时会有些慢。【定义】定义:set<...原创 2019-01-13 20:20:37 · 457 阅读 · 0 评论