STL--STL和她的小伙伴们:

STL--概述:
  标准模板库(StandardTemplateLibrary,STL),是C++程序设计语言标准模板库。STL是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。虽然它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。
STL是所有C++编译器和所有操作系统平台都支持的一种库,包含了很多在计算机科学领域里所常用的基本数据结构和基本算法,为广大C++程序员提供了一个可扩展的应用框架,高度体现了软件的可复用性。
  对所有的编译器来说,提供给C++程序设计者的接口都是一样的。也就是说同一段STL代码在不同编译器和操作系统平台上运行的结果都是相同的,但是底层实现可以是不同的,使用者并不需要了解它的底层实现。
使用STL的应用程序保证得到的实现在处理速度和内存利用方面都是高效的,因为STL设计者们已经考虑好了。
使用STL编写的代码更容易修改和阅读。因为代码更短,很多基础工作代码已经被组件化了;使用简单,虽然内部实现很复杂。
  STL是建立在模板函数和模板类基础之上的功能强大的库。
  模板函数可以实现一般化的常用算法(如统计、排序、查找等)
  模板类可以实现支持几乎所有类型的容器,用来实现常用的数据结构(如链表、栈、队列、平衡二叉树等)
                              STL 头文件一览表:
 

头文件

内容

头文件

内容

<iterator>

迭代器

<vector>

向量

<utility>

辅助功能

<deque>

双头队列

<memory>

内存管理

<list>

链表

<algorithm>

算法

<set>

集合与多重集合

<functional>

函数对象

<map>

映射与多重映射

<numeric>

数值运算

<stack>

   

<queue>

队列与优先队列

 
 
 
迭代器的定义和种类:
n迭代器(iterator)实际上是一种一般化的指针类型,是对指针类型的抽象。
n根据所支持操作的不同,迭代器被分为五大类:
¨输出迭代器(input iterator)
¨输入迭代器(output iterator)
¨前向迭代器(forward iterator)
¨双向迭代器(bidirectional iterator)
¨随机迭代器(random access iterator)
 
                                                                                        各种迭代器的功能

迭代器类型

输出迭代器

输入迭代器

前向迭代器

双向迭代器

随机迭代器

缩写

Out

In

For

Bi

Ran

读取

不支持

x =   *p

x =   *p

x =   *p

x =   *p

操作

不支持

p->x

p->x

p->x

p->x   p[i]

写入

*p   = x

不支持

*p   = x

*p   = x

*p   = x

迭代

++

++

++

++   --

++   -- + - += -=

比较

不支持

==   !=

==   !=

==   !=

==   != < > <= >=

 
 
更多关于迭代器的信息:
指针类型就是一种特殊的随机迭代器类型。
对于一般的迭代器,这些功能都是通过操作符重载来实现的。
各种迭代器类型之间的关系:
                                                                     输出迭代器
 随机迭代器---》双向迭代器---》向前迭代器---》
                                                                     输入迭代器
 
迭代器的作用
¨访问元素
¨算法与容器之间的纽带
 
 
与算法有关的知识:
 
算法(algorithm)
¨每个算法都是一个或者一组模板函数,用来完成一项特定的操作。
序列(sequence)
¨序列用两个迭代器来描述,表示一组连续的元素;其中,第一个迭代器指向序列中的第一个元素,第二个迭代器指向序列最后一个元素的后一个位置。
函数对象(function object)
¨函数对象重载了函数调用操作符(operator ()),可以像普通函数一样被使用。
谓词(predicate)
¨返回值类型为bool的函数对象
 
常用函数对象:
STL在头文件<functional>中提供了一些常用运算的函数对象。
 

类名

类型

作用

equal_to

双目

arg1   == arg2

not_equal_to

双目

arg1   != arg2

greater

双目

arg1   > arg2

less

双目

arg1   < arg2

greater_equal

双目

arg1   >= arg2

less_equal

双目

arg1   <= arg2

logical_and

双目

arg1   && arg2

logical_or

双目

arg1   || arg2

logical_not

单目

!arg

plus

双目

arg1   + arg2

minus

双目

arg1   - arg2

multiplies

双目

arg1   * arg2

divides

双目

arg1   / arg2

modulus

双目

arg1   % arg2

negate

单目

-arg

 
STL算法一览:
访问元素类
¨for_each(), transform()
顺序查找类
¨find(), find_if(), find_first_of(), adjacent_find(), search(), find_end(), search_n()
统计类
¨count(), count_if()
比较类
¨mismatch(), equal(), lexicographical_compare()
复制类
¨copy(), copy_backward()
交换类
¨swap(), iter_swap(), swap_ranges()
替换类
¨replace(), replace_if(), replace_copy(), replace_copy_if()
填充发生类
¨fill(), fill_n(), generate(), generate_n()
删除类
¨remove(), remove_if(), remove_copy(), remove_copy_if
去重类
¨unique(), unique_copy()
反转类
¨reverse(), reverse_copy()
旋转类
¨rotate(), rotate_copy()
随机打乱类
¨random_shuffle()
排序类
¨sort(), stable_sort(), partial_sort(), partial_sort_copy(), nth_element()
二分查找类
¨lower_bound(), upper_bound(), equal_range(), binary_search()
合并类
¨merge(), inplace_merge()
¨partition(), stable_partition()
集合运算类
¨includes(), set_union(), set_intersection(), set_difference(), set_symmetric_difference()
堆操作类
¨make_heap(), push_heap(), pop_heap(), sort_heap()
最大最小类
¨min(), max(), min_element(), max_element()
排列类
¨next_permutation(), prev_permutation()
数值运算类
¨accumulate(), inner_product(), partial_sum(), adjacent_difference()
 
                                                                                            常用STL容器
 

名称

描述

所在头文件

迭代器类型

vector

向量

<vector>

随机迭代器

deque

双头队列

<deque>

随机迭代器

list

链表

<list>

双向迭代器

stack

<stack>

不提供迭代器

queue

队列

<queue>

不提供迭代器

priority_queue

优先队列

<queue>

不提供迭代器

set

集合

<set>

双向迭代器

multiset

多重集合

<set>

双向迭代器

map

映射

<map>

双向迭代器

multimap

多重映射

<map>

双向迭代器

 
一般容器:
  vector            deque                list
 
容器适配器:
  栈stack
  队列queue
  优先队列priority_queue
关联容器:
 
元素有序
用平衡二叉树实现
类名:set, multiset, map, multimap
分类
¨按元素构成来分
集合:元素本身就是关键字,直接参与排序
映射:元素由关键字和被映射的值构成,只有关键字参与排序
¨按关键字能否重复来分
普通:关键字不能重复
多重:关键字允许重复
 
 
关联容器的特殊成员函数:
 
查找类
¨find()
¨lower_bound()
¨upper_bound()
¨equal_range()
复合类
¨operator []()
 
STL的优缺点:
优点:
¨降低编程复杂度
¨提高代码的正确率
缺点:
¨编译时会出各种错误
¨给动态调试增加难度
 
给几条建议吧:
多用STL的算法
优先使用内置数组
多用静态查错
动态查错时向屏幕输出
 
小节:
STL以面向对象的程序设计和一般化编程为基础,提供了功能强大的算法和容器,并通过迭代器把这两部分有机地结合起来
haha
上一篇:Python基本数据类型之str


下一篇:java IO(四):键盘录入