![](https://img-blog.csdnimg.cn/20190802141720765.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++之STL总结
STL(Standard Template Library)里有很多组成部分,但是主要有三个,容器、迭代器和算法 。STL的数据和操作是分离的。数据存储在容器里,使用算法进行操作。迭代器是这两者之间的粘合剂,让算法与容器可以进行交互。
浩海烟云
软件开发选手
展开
-
STL(一)---概述
STL(Standard Template Library)里有很多组成部分,但是主要有三个,容器、迭代器和算法 容器用来管理某个特定对象的集合。每一种容器都有自己的优点和缺点,在项目中根据不同的需求,使用不同的容器。容器可以是数组、链表或者类字典。 迭代器用于遍历对象集合的元素。这些集合可以是容器或容器的子集。每一个容器类都提供了它自己的迭代器类型。 算法用来处理的元素的集合。例如,可以进行搜索...转载 2019-08-02 15:29:18 · 190 阅读 · 0 评论 -
STL(二)---算法
STL(二)—算法 算法库定义了用来实现各种功能的函数(如查找、排序、计数、修改等),都是针对指定范围内元素的操作。需要注意的是,元素的范围以 [first, last) 的形式指定,其中 last 指的是范围内最后一个元素的下一个元素。在头文件 中定义。 ...原创 2019-08-03 16:10:58 · 149 阅读 · 0 评论 -
STL(三)---迭代器
STL(三)—迭代器 头文件 所有的容器都定义了自己的迭代器类型,所以一般情况下,不需要再自己添加迭代器头文件。但是如果要使用一些特殊的迭代器,如反向迭代器,或者一些迭代器辅助函数,那么就需要添加头文i iterator。 迭代器类型 类型 能力 提供者 输入迭代器 一次向前读取 istream 输出迭代器 向前写入 ostream,inserter 前向迭代器 向前读取和...原创 2019-08-03 18:32:59 · 108 阅读 · 0 评论 -
STL(四)---array
简介 array在头文件 中定义 namespace std { template<class T, size_t N> class array; } array是固定元素个数的容器,与相应C数组的语义相同,容器array< T,N> 的大小等于相应C数组T[N]的大小,且性能也与C数组相同。但是它提供了C++标准容器的相应特性,如可以查询容器大小,支持...原创 2019-08-09 10:29:41 · 110 阅读 · 0 评论 -
STL(五)---vector
简介 在头文件 中定义 namespace std { template <typename T, typename Allocator = allocator<T> > class vector; } vector 是一种序列容器,是对大小可变数组的封装。 数组中的元素是连续存储的,所以除了能够通过迭代器访问外,还可以通过常规的指针偏...原创 2019-08-09 10:49:13 · 146 阅读 · 0 评论 -
STL(十四)---特殊容器priority_queue
简介 在头文件queue 中定义 namespace std { template <typename T, typename Container = vector<T>, typename Compare = less<typename Container::value_type>> ...原创 2019-09-01 17:08:51 · 166 阅读 · 0 评论 -
STL(十三)---特殊容器queue
简介 在头文件queue中定义 namespace std { template <typename T, typename Container = deque<T>> class queue; } queue就是数据结构里队列的实现,先进先出。定义中的第二个参数用来定义queue内部存放元素的实际容器,可以是任何序列式容器,默认容器为deque。 核心接口 ...原创 2019-09-01 17:05:18 · 220 阅读 · 0 评论 -
STL(十二)---特殊容器stack
简介 在头文件stack中定义 namespace std { template <typename T, typename Container = deque<T>> class stack; } stack就是数据结构里堆栈的实现,后进先出。定义中的第二个参数用来定义stack内部存放元素的实际容器,可以是任何序列式容器,默认容器为deque,是因...原创 2019-09-01 16:59:24 · 172 阅读 · 0 评论 -
STL(十一)---无序容器(Unordered Container)
简介 在头文件<unordered_set>和<unordered_map> 中定义 namespace std { template <typename T, typename Hash = hash<T>, typename EqPred = equal_to<T>, ...原创 2019-09-01 16:55:33 · 278 阅读 · 0 评论 -
STL(十)---map和multimap
简介 在头文件map中定义 namespace std { template <typename Key, typename T, typename Compare = less<Key>, typename Allocator = allocator<pair<const Key,T> > >...原创 2019-09-01 16:47:52 · 142 阅读 · 0 评论 -
STL(九)---set和multiset
简介 在头文件set>中定义 namespace std { template <typename T, typename Compare = less<T>, typename Allocator = allocator<T> > class set; template &...原创 2019-09-01 16:27:15 · 169 阅读 · 0 评论 -
STL(八)---forward_list
STL(八)—forward_list 简介 在头文件 <forward_forward_list> 中定义 namespace std { template <typename T, typename Allocator = allocator<T> > class forward_forward_list; } 单向列表是...原创 2019-09-01 16:01:57 · 143 阅读 · 0 评论 -
STL(七)---list
STL(七)—list 简介 在头文件 中定义 namespace std { template <typename T, typename Allocator = allocator<T> > class list; } 列表是一个容器,它支持任何位置的元素快速插入和删除,不支持快速的随机访问。 它被实现为双向的链表。 与forward_list相比,它...原创 2019-09-01 14:57:41 · 101 阅读 · 0 评论 -
STL(六)---deque
STL(六)—deque 简介 在头文件 中定义 namespace std { template <typename T, typename Allocator = allocator<T> > class deque; } deque(双向队列)是一个索引序列的容器,允许对其头部和尾部进行快速的插入和删除。此外,在deque两端插入和删除并不会使其它...原创 2019-09-01 14:51:17 · 185 阅读 · 0 评论 -
STL(十五)---容器的选用
容器的选用 默认情况下,选用vector,内部数据结构最简单,允许随机存取。 如果经常要在序列头部和尾部插入和删除元素,应该使用deque。如果希望元素被删除时,容器能自动缩减内存,那么也要选deque。此外,由于vector通常采用一个内存块存放元素,而deque采用多个内存块,后者可包含更多元素。 如果需要经常在容器中段执行元素的插入、删除或移动,可考虑list。list提供特殊成员函数,可在...原创 2019-09-01 17:48:50 · 181 阅读 · 0 评论