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

STL--STL和她的小伙伴们:的更多相关文章

  1. STL —— STL六大组件

    注:以下内容摘自 http://blog.csdn.net/byxdaz/article/details/4633826 STL六大组件 容器(Container) 算法(Algorithm) 迭代器 ...

  2. [STL] STL各容器实现原理

    STL共有六大组件1.容器 2.算法 3.迭代器 4.仿函数 6.适配器 STL容器的实现原理 STL来管理数据十分方便,省去了我们自己构建数据结构的时间.其实,STL的实现也是基于我们常见的数据结构 ...

  3. C++ 之高效使用STL ( STL 算法分类)

    http://blog.csdn.net/zhoukuo1981/article/details/3452118

  4. STL 跨模块 调用 异常 解决

    本文为转载别人的,以作收藏之用 百度了一天,现在把结论放上边: 1.不要用STL(std::string属于STL)来跨模块传输数据,例如:dll(so)之间,dll(so)和exe(elf)之间. ...

  5. C++之STL一般总结

    重新复习一下STL 什么是STL? STL(模板和标准模板库),实现与类型无关的算法和数据类型,需要将实现中的类型参数化,允许用户根据它的需要制定不同的类型. 一.一般介绍 STL(Standard ...

  6. C++标准库简介、与STL的关系。

    转自http://www.cnblogs.com/xiongjiaji/archive/2011/06/22/2476490.html C++标准库的所有头文件都没有扩展名.C++标准库的内容总共在5 ...

  7. 数据结构(DataStructure)与算法(Algorithm)、STL应用

    catalogue . 引论 . 数据结构的概念 . 逻辑结构实例 2.1 堆栈 2.2 队列 2.3 树形结构 二叉树 . 物理结构实例 3.1 链表 单向线性链表 单向循环链表 双向线性链表 双向 ...

  8. DLL中传递STL参数(如Vector或者list等)会遇到的问题[转载]

    最近的一个项目中遇到了调用别人的sdk接口(dll库)而传给我的是一个vector指针,用完之后还要我来删除的情况.这个过程中首先就是在我的exe中将其vector指针转为相应指针再获取vector中 ...

  9. STL学习之路

    本文面向的读者:学习过C++程序设计语言(也就是说学习过Template),但是还没有接触过STL的STL的初学者.这实际上是我学习STL的一篇笔记,老鸟就不用看了. 什么是泛型程序设计 我们可以简单 ...

  10. C++ Standard Template Library STL(undone)

    目录 . C++标准模版库(Standard Template Library STL) . C++ STL容器 . C++ STL 顺序性容器 . C++ STL 关联式容器 . C++ STL 容 ...

随机推荐

  1. mysql-5.5.28源码安装过程中错误总结

    介绍一下关于mysql-5.5.28源码安装过程中几大错误总结,希望此文章对各位同学有所帮助.系统centOS 6.3 mini (没有任何编译环境)预编译环境首先装了众所周知的 cmake(yum ...

  2. DateTimeUtil 工具类,android 和 java 通用

    import java.sql.Date;import java.text.SimpleDateFormat; public class DateTimeUtil { public final cla ...

  3. scp跨主机拷贝工具

     参考:http://www.cnblogs.com/hitwtx/archive/2011/11/16/2251254.html SSH上A机,要将10.1.17.95机/tpdata/shell_ ...

  4. test if DEMO

    可参考:http://blog.chinaunix.net/uid-20671208-id-3643362.html 1.test 举例: test -d ~/auto && echo ...

  5. 怎么样 解决nginx负载均衡的session共享问题呢

    php服务器有多台,用nginx做负载均衡,这样同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,就会出现很多问题,比如说最常见的登录状态,下面提供了几种方式来解决ses ...

  6. python :eval将字符串转换成字典

    #将字符串打印成字典 b=''' {'record': {'weight':20,'server':'100.1.7.9','maxconn':50},'backend': 'www.oldboy.o ...

  7. 【20160924】GOCVHelper 图像增强部分(1)

    图像增强是图像处理的第一步.这里集成了一些实际使用过程中有用的函数.   //读取灰度或彩色图片到灰度     Mat imread2gray(string path){         Mat sr ...

  8. Unity-Animator深入系列---StateMachineBehaviour初始化时间测试

    回到 Animator深入系列总目录 结果和想的有点出入 测试结果: 1.SMB初始化会被调用多次,次数不可控,当Animator组件重复开关则重复初始化. 2.SMB支持构造函数 MyClass p ...

  9. python3数据类型

    python基本数据类型 Python3 中有六个标准的数据类型: Number(数字) String(字符串) List(列表) Tuple(元组) Sets(集合) Dictionary(字典) ...

  10. servlet中Java连接数据库后的基本操作

    servlet中Java连接数据库后的基本操作 在eclipse中新建一个工程:login 在Server中新建一个服务器,基本的操作不用说了,在前两天的笔记中可以找到; 需要知道数据库的用户名和密码 ...