STL容器简介

stl不是面向对象的编程,而是一种不一样的编程模式————泛型编程数据库

咱们经常使用到的STL容器有vector、list、deque、map、multimap、set、multiset编程

顺序性容器:vector、deque、list
关联性容器:set、multiset、map、multimap
容器适配器:stack、queue数组

verctor

  vector相似于动态数组,直接访问元素,从后面快速插入或者删除;
  vector相似于C语言中的数组,它维护一段连续的内存空间,具备固定的起始地址,于是能很是方便地进行随机存取,即 [] 操做符,但由于它的内存区域是连续的,因此在它中间插入或删除某个元素,须要复制并移动现有的元素。此外,当被插入的内存空间不够时,须要从新申请一块足够大的内存并进行内存拷贝。值得注意的是,vector每次扩容为原来的两倍,对小对象来讲执行效率高,但若是遇到大对象,执行效率就低了。数据结构

list

  能够从任何地方插入或者删除;
  相似于C语言中的双向链表,它经过指针来进行数据的访问,所以维护的内存空间能够不连续,这也很是有利于数据的随机存取,于是它没有提供 [] 操做符重载; 性能

deque

  是一个double-ended queue
  1)支持随即存取,也就是[]操做符,
  2)支持两端操做,push(pop)-back(front),在两端操做上与list效率差很少
spa

stack

  1)可用 vector, list, deque来实现
  2)缺省状况下,用deque实现
  template<classT, class Cont = deque<T> >
  class stack { ….. };
  3)用 vector和deque实现,比用list实现性能好
  4)stack是后进先出的数据结构,
  5)只能插入、删除、访问栈顶的元素的操做: push: 插入元素pop: 弹出元素 top: 返回栈顶元素的引用指针

map

  map相似于数据库中的1:1关系,它是一种关联容器,提供一对一(C++ primer中文版中将第一个译为键,每一个键只能在map中出现一次,第二个被译为该键对应的值)的数据处理能力,这种特性了使得map相似于数据结构里的红黑二叉树。
对象

multimap

  相似于数据库中的1:N关系,它是一种关联容器,提供一对多的数据处理能力。
内存

set

  相似于数学里面的集合,不过set的集合中不包含重复的元素,这是和vector的第一个区别,第二个区别是set内部用平衡二叉树实现,便于元素查找,而vector是使用连续内存存储,便于随机存取。
数学

multiset

  相似于数学里面的集合,集合中能够包含重复的元素。

小结

 在实际使用过程当中,到底选择这几种容器中的哪个,应该根据遵循如下原则:
一、若是须要高效的随机存取,不在意插入和删除的效率,使用vector;
二、若是须要大量的插入和删除元素,不关心随机存取的效率,使用list;
三、若是须要随机存取,而且关心两端数据的插入和删除效率,使用deque;
四、若是打算存储数据字典,而且要求方便地根据key找到value,一对一的状况使用map,一对多的状况使用multimap;
五、若是打算查找一个元素是否存在于某集合中,惟一存在的状况使用set,不惟一存在的状况使用multiset。

相关文章
相关标签/搜索