STL总结

一、STL概述
1. STL C++ 标准程序库的核心,深刻影响了标准程序库的整体结构
STL 由一些可适应不同需求的 集合类( collection class ,以及在这些数据集合上操作的 算法( algorithm 构成
STL 内的所有组件都由 模板( template 构成,其元素可以是 任意类型
STL 是所有 C++ 编译器和所有操作系统平台都支持的一种库
2.STL组件
Ø容器( Container) - 管理某类对象的集合
Ø迭代器( Iterator) - 在对象集合上进行遍历
Ø算法( Algorithm) - 处理集合内的元素
Ø容器适配器( container adaptor
Ø函数对象( functor )
3. STL 容器类别
Ø序列式容器-排列次序取决于 插入时机和位置
Ø关联式容器-排列顺序取决于 特定准则
4.STL容器的共同能力
Ø所有容器中存放的都是 值而非引用。如果希望存放的不是副本,容器元素只能是指针。
Ø所有元素都形成一个次序( order),可以按相同的次序一次或多次遍历每个元素
5.STL容器元素的条件
Ø必须能够通过 拷贝构造函数进行复制
Ø必须可以通过 赋值运算符完成赋值操作
Ø必须可以通过 析构函数完称销毁动作
Ø序列式容器元素的 默认构造函数必须可用
Ø某些动作必须定义 operator== ,例如搜寻操作
Ø关联式容器必须定义出 排序准则,默认情况是重载 operator<
6. STL 容器的共同操作
Ø与大小相关的操作( size operator
size()-返回当前容器的元素数量
empty()-判断容器是否为空
max_size() -返回容器能容纳的最大元素数量
Ø比较( comparison
==,!=,<,<=,>,>=
比较操作两端的容器必须属于同一类型
如果两个容器内的所有元素按序相等,那么这两个容器相等
采用字典式顺序判断某个容器是否小于另一个容器
二、STL容器

1.map/multimap

Ø使用平衡二叉树管理元素
Ø元素包含两部分 ( key,value) keyvalue 可以是任意类型
Ø必须包含的头文件 #include<map>
Ø根据元素的 key自动对元素排序,因此根据元素的 key 进行定位很快,但根据元素的 value 定位很慢
Ø不能直接改变元素的 key,可以通过 operator []直接存取元素值
Ø map 中不允许 key 相同的元素, multimap允许 key相同的元素
2. set/ multiset
Ø使用平衡二叉树管理元素
Ø集合 (Set) 是一种包含已排序对象的关联容器。
Ø必须包含的头文件 #include<set>
Ø map 容器是键 - 值对的集合,好比以人名为键的地址和电话号码。相反地, set 容器只是单纯的键的集合。当我们想知道某位用户是否存在时,使用 set 容器是最合适的。
Ø set 中不允许 key 相同的元素, multiset允许 key相同的元素
三、列子

e.g.

n 比赛又开始了。看见到处都是气球升起,多激动啊!告诉你一个秘密:裁判正在非常开心地猜测哪一题最受欢迎。当比赛结束时,他们统计每种颜色气球的数量就知道结果了。
n 输入

输入有多组测试例。

对每个测试例,第一个数字是N0N1000),表示气球的数量。接下来N行,每行是一个气球的颜色,由小写字母构成的字符串表示,长度不超过15个。当N0时,表示输入结束。

n 输出

对每个测试例输出一行,
是表示最受欢迎的题目的气球颜色。
四、Algorithm(算法)
1. 泛型算法通则
Ø所有算法的前两个参数都是一对 iterators :[ first,last),用来指出容器内一个范围内的元素。
Ø每个算法的声明中,都表现出它所需要的最低层次的 iterator 类型。
2.变序列的算法

template<class FwdIt>

FwdIt unique(FwdIt first, FwdIt last);

== 比较是否相等

template<class FwdIt, class Pred>

FwdIt unique(FwdIt first, FwdIt last, Pred pr);

pr 比较是否等

去除[first,last) 这个升序序列中的重复元素

返回值是迭代器,指向元素删除后的区间的最后一个元素的后面

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值