一、什么是STL
 STL是standart template library,标准模板库。
 是HP实验室开发的一系列软件的统称,从根本上来说,它是一些容器和算法的集合,它是世界上很多最聪明的程序员多年的杰作。
 STL是标准化的组件,不用重新开发,可以直接使用,它是C++的一部分,不需要额外安装。
 
二、STL中有什么
 1、容器
  存储类对象的盒子。
  线性容器:vector、list
  容器适配器:queue、stack、double queue
  关系型容器:set、map、
 
 2、算法
  #include <algorithm>
  find sort
 
 3、迭代器
  迭代器是一个类,它实现于容器模板中。
  它的对象是一个指向容器中的一个元素,它实现的*运算符,给人的感觉它好像是个指针。
  从容器中获取到迭代器是一个半开半闭区间[start,end)。
 
三、vector容器
 1、特点:
  a、占用的是连续的内存
  b、动态的管理内存
  c、支持随机访问(at,[])。
  d、支持按迭偌器进行插入和删除(inster,erase)
   但只有在末尾添加和删除时效率才最高。
  e、支持随机迭代:it=it+4;
 
 2、定义
  vector<类型> a; // 创建容器,
  vectro<类型> a(10); // 创建容器并设置容量为10,把元素初始化为0
  vector<类型> a(10,1);// 创建容器并设置容量为10,并设置初始值
 
 3、返回值
  v[i]、v.at(i)、v.front()、v.back()这种方式返回的是元素的引用。
 
 4、成员函数
   void assign( input_iterator start, input_iterator end);
void assign( size_type num, const TYPE &val);
   size_type capacity(); //获取容器在扩充之后的容量

   iterator erase( iterator loc );
iterator erase( iterator start, iterator end ); iterator insert( iterator loc, const TYPE &val );
void insert( iterator loc, size_type num, const TYPE &val );
void insert( iterator loc, input_iterator start, input_iterator end ); // 元素被删除或插入之后,之前的获取的迭代器就失效,需要重新获取。
void resize( size_type size, TYPE val );
//改容器的大小,可以调大(构造),也可以调小(析构)。
 
 
 5、运算符
  ==、!=、>=、<=、>、<
  比较两人个容器中元素的数量、顺序、值是否相等。
  容器中存储的对象的==运算符必须要重载。
 
 
 6、排序、查找
  在vector容器中是没有排序和查找成员函数。
  在List容器中由于这是链式的存储结构所有不能使用全局的sort函数,必须自己实现。
  在使用sort排序时,待排序的对象必须实现出<的重载(或者给sort提高比较函数)。
 
 7、自定义类使用容器时需要实现的成员有
  无参构造、拷贝构造
  == <
 
四、set容器
 集合容器,里面的元素不会重复,它会自动排重。
 使用时要实现它的==运算符。
 
 multiset 允许有重复的数据。
 
  pair equal_range( const key_type &key );
查找值等于key的元素信息,返回两人个迭代器。 iterator lower_bound( const key_type &key );
查找大于等于key的第一个元素 iterator upper_bound( const key_type &key );
查找大于key的第一个元素
五、队列
 单向队列:
  back、empty、front、pop、push、size
 双向队列:
 
六、List
 是一种链式存储结构,不能使用算法库中的排序,只能调用自带的排序函数。
 
  void unique();
void unique( BinPred pr );
删除重复的元素。 void splice( iterator pos, list &lst );
void splice( iterator pos, list &lst, iterator del );
void splice( iterator pos, list &lst, iterator start, iterator end );
从指定的位置开始合并两个链表 void merge( list &lst );
void merge( list &lst, Comp compfunction );
直接合并两人个链表
 
七、map是一种关联式的容器
 它底层以采用的是红黑树(有序+平衡)进行存储的。
 一个键值(主键)只能对应一个值。
 
 multimap 多重映射
 键值可以重复
 
八、priority_queue优先队列
 元素在入队后就已经排序好了,最大值在上面。
 对元素排序依靠的是 < 运算符。
 
 
 
 
 
 

7.STL的更多相关文章

  1. 详细解说 STL 排序(Sort)

    0 前言: STL,为什么你必须掌握 对于程序员来说,数据结构是必修的一门课.从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来.幸运的是这些理论都已经比较成熟,算 ...

  2. STL标准模板库(简介)

    标准模板库(STL,Standard Template Library)是C++标准库的重要组成部分,包含了诸多在计算机科学领域里所常见的基本数据结构和基本算法,为广大C++程序员提供了一个可扩展的应 ...

  3. STL的std::find和std::find_if

    std::find是用来查找容器元素算法,但是它只能查找容器元素为基本数据类型,如果想要查找类类型,应该使用find_if. 小例子: #include "stdafx.h" #i ...

  4. STL: unordered_map 自定义键值使用

    使用Windows下 RECT 类型做unordered_map 键值 1. Hash 函数 计算自定义类型的hash值. struct hash_RECT { size_t operator()(c ...

  5. C++ STL简述

    前言 最近要找工作,免不得要有一番笔试,今年好像突然就都流行在线笔试了,真是搞的我一塌糊涂.有的公司呢,不支持Python,Java我也不会,C有些数据结构又有些复杂,所以是时候把STL再看一遍了-不 ...

  6. codevs 1285 二叉查找树STL基本用法

    C++STL库的set就是一个二叉查找树,并且支持结构体. 在写结构体式的二叉查找树时,需要在结构体里面定义操作符 < ,因为需要比较. set经常会用到迭代器,这里说明一下迭代器:可以类似的把 ...

  7. STL bind1st bind2nd详解

    STL bind1st bind2nd详解   先不要被吓到,其实这两个配接器很简单.首先,他们都在头文件<functional>中定义.其次,bind就是绑定的意思,而1st就代表fir ...

  8. STL sort 函数实现详解

    作者:fengcc 原创作品 转载请注明出处 前几天阿里电话一面,被问到STL中sort函数的实现.以前没有仔细探究过,听人说是快速排序,于是回答说用快速排序实现的,但听电话另一端面试官的声音,感觉不 ...

  9. STL的使用

    Vector:不定长数组 Vector是C++里的不定长数组,相比传统数组vector主要更灵活,便于节省空间,邻接表的实现等.而且它在STL中时间效率也很高效:几乎与数组不相上下. #include ...

  10. [C/C++] C/C++延伸学习系列之STL及Boost库概述

    想要彻底搞懂C++是很难的,或许是不太现实的.但是不积硅步,无以至千里,所以抽时间来坚持学习一点,总结一点,多多锻炼几次,相信总有一天我们会变得"了解"C++. 1. C++标准库 ...

随机推荐

  1. Python_闭包_27

    #闭包:嵌套函数,内部函数 并且必须调用外部函数的变量 def outer(): a = 1 def inner(): print(a) inner() print(inner.__closure__ ...

  2. [北航矩阵理论A]课程笔记

    [北航矩阵理论A]课程笔记 一.特征值 特征根相关: 设任一方阵 \(A = (a_{ij})_{n\times n} \in C^{n\times n}\) 特征多项式 \(T(\lambda)=| ...

  3. 安装python包时报错

    pip install numpy  时  报错: Traceback (most recent call last):  File "d:\学习\python\python-3.6.5\l ...

  4. Linux添加目录到环境变量以及添加sublime到环境变量

    博主之前有过这种情况,就是在普通用户下su ls等命令还有效,可登陆进root用户之后这些常用的命令竟然失效了. 像这样 这问题其实很简单,但是对于不清楚环境变量的配置的同学来说也的确棘手,我之前就是 ...

  5. Mesos的用途

    http://mesos.apache.org/ https://mesosphere.com/why-mesos/ http://www.cnblogs.com/ee900222/p/docker_ ...

  6. PHP自动加载上——spl_autoload_register

    spl_autoload_register函数是实现自动加载未定义类功能的的重要方法,所谓的自动加载意思就是 我们的new 一个类的时候必须先include或者require的类文件,如果没有incl ...

  7. php实现常驻进程 多进程监控

    php都是通过crontabd定时脚本处理队列的,面试被问到php如何常驻进程进行处理队列,想了半天这样不知道是否是一种方式 <?php function logs(){ file_put_co ...

  8. [转帖]Tensor是神马?为什么还会Flow?

    Tensor是神马?为什么还会Flow? 互联网爱好者 百家号17-05-2310:03 大数据文摘作品,转载要求见文末 编译 | 邵胖胖,江凡,笪洁琼,Aileen 也许你已经下载了TensorFl ...

  9. pandas 级联 concat append

    连接的一个有用的快捷方式是在Series和DataFrame实例的append方法.这些方法实际上早于concat()方法. 它们沿axis=0连接 #encoding:utf8 import pan ...

  10. 今天看到了一篇文档 app 测试内容记录下来

    1 APP测试基本流程 1.1流程图 1.2测试周期 测试周期可按项目的开发周期来确定测试时间,一般测试时间为两三周(即15个工作日),根据项目情况以及版本质量可适当缩短或延长测试时间.正式测试前先向 ...