笔记:标准模板库(STL)

简单地说,标准模板库(STL)是一组模板类和函数,向程序员提供了:

  • 用于存储信息的容器;
  • 用于访问容器存储的信息的迭代器;
  • 用于操作容器内容的算法。
  1. STL容器:容器是用于存储数据的STL类,STL提供了两种类型的容器类:顺序容器和关联容器。另外,STL还提供了被称为容器适配器的类,他们是顺序容器和关联容器的变种,包含的功能有限,用于满足特殊的要求。

顺序容器:按顺序存储数据,顺序容器具有插入速度快但查找速度相对慢的特征。STL容器包括:

  • std::vector------操作与动态数组一样,在最后插入数据;可将vector视为书架,您可在一端添加和拿走图书。
  • std::deque------与std::vector类似,但允许在开头插入或删除元素。
  • std::list-------操作与双向链表一样,可将它视为链条,对象被连接在一起,可以在任何地方添加和删除元素。
  • std::forward_list----类似于std:list,但是单项链表,只能沿一个方向遍历。

关联容器:按指定的顺序存储数据,就像词典一样,这将降低插入数据的速度,但在查询方面有很大优势。STL提供的关联容器包括、:

  • std::set------存储各不相同的值,在插入时进行排序;容器的复杂度为对数;
  • std::unordered_set----存储各不相同的值,在插入时进行排序;容器的复杂度为对数;这种容器是c++11新增的。
  • std::map------存储键-值对,并根据唯一的键排序;容器的复杂度为对数;
  • std::unordered_map----存储键-值对,并根据唯一的键排序;容器的复杂度为对数;这种容器是c++11新增的.
  • std::multiset----与set类似,但允许存储多个值相同的项,即值不需要时唯一的;
  • std::unordered_multiset----与set类似,但允许存储多个值相同的项,即值不需要时唯一的;这种容器是c++11新增的。
  • std::multimap-----与map类似,但不要求键是唯一的。
  • std::unordered_multimap-----与map类似,但不要求键是唯一的,这种容器是c++11新增的。
容器适配器:是顺序容器和关联容器的变种,包含的功能有限,用于满足特殊的要求,主要的适配器类如下。

  • std::stack:以后进先出的方式存储元素,能够在栈顶插入和删除元素。
  • std::queue:以先进先出的方式存储元素,能够删除最先插入的元素。
  • std::priority_queue:以特定顺序存储元素,因为优先级最高的元素总是位于队列开头。
2.STL迭代器 :最简单的迭代器是指针。给定一个指向数组中的第一个元素的指针,可递增该指针使其指向下一个元素,还可以对当前位置的元素进行操作。STL中的迭代器是模板类,从某种程度上说,他们是泛型指针。这些模板类让程序员能对STL容器进行操作。注意,操作也可以是以模版函数的方式提供 的STL算法,迭代器是一座桥梁,让这些模板函数能够以一致而无缝的方式处理容器,而容器是模板类。STL提供的迭代器分为两大类。

  • 输入迭代器:通过对输入迭代器解除引用,它将引用对象,而对象可能位于集合中。最严格的输入迭代器确保只能以只读的方式访问对象。
  • 输出迭代器:输出迭代器让程序员对集合执行写入操作。最严格的输出迭代器确保只能执行写入操作。
上述两种迭代器可进一步分为三类。

  • 前向迭代器:这是输入和输出迭代器的一种细化,它允许输入和输出。前向迭代器可以是const的,只能读取它指向的对象,也可以改变对象,即可读写对象,通常用于单项链表。
  • 双向迭代器:是前向迭代器的一种细化,可对其执行递减操作,从而向后移动,通常用于双向链表。
  • 随机访问迭代器 :是双向迭代器的一种细化,可将其加减一个偏移量,还可以将两个迭代器相减以得到集合中两个元素的相对距离,通常用于数组。
3.STL算法 :查找、排序、和反转都是标准的编程需求,不应让程序员重复实现这样的要求。因此STL以STL算法的方式提供这些函数,通过结合使用这些函数和迭代器,程序员可对容器执行一些最常见的操作。最常用的STL算法如下所示:

  • std::find:在集合中查找值。
  • std:::find_if:根据用户指定的谓词在集合中查找值。
  • std::reverse:反转集合中元素的排列顺序。
  • std::remove:根据用户定义的谓词将元素从集合中删除。
  • std::transform:使用用户定义的变量函数对容器中的元素进行变换。
  • 这些都是std命名空间中的模板函数,要使用他们,必须包含标准头文件<algorithm>



































































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值