STL总结

原创 2016年08月28日 20:17:02

一、介绍

   STL(Standard Template Library),即标准模板库,该库包含了诸多常用的基本数据结构和基本算法。
  从逻辑层次来看,在STL中体现了泛型化程序设计的思想(generic programming),引入了诸多新的名词,比如像需求(requirements),概念(concept),模型(model),容器(container),算法(algorithmn),迭代子(iterator)等。与OOP(object-oriented programming)中的多态(polymorphism)一样,泛型也是一种软件的复用技术;
   从实现层次看,整个STL是以一种类型参数化(type parameterized)的方式实现的,这种方式基于一个在早先C++标准中没有出现的语言特性--模板(template)。如果查阅任何一个版本的STL源代码,你就会发现,模板作为构成整个STL的基石是一件千真万确的事情。除此之外,还有许多C++的新特性为STL的实现提供了方便;

二、STL的六大组件

  1. 容器(Container)
    一种数据结构,如list,vector,和deques ,以模板类的方法提供。为了访问容器中的数据,可以使用由容器类输出的迭代器;
  2. 迭代器(Iterator),
    提供了访问容器中对象的方法。例如,可以使用一对迭代器指定list或vector中的一定范围的对象。迭代器就如同一个指针。事实上,C++的指针也是一种迭代器。但是,迭代器也可以是那些定义了operator*()以及其他类似于指针的操作符de方法的类对象;
  3. 算法(Algorithm)
    是用来操作容器中的数据的模板函数。例如,STL用sort()来对一个vector中的数据进行排序,用find()来搜索一个list中的对象,函数本身与他们操作的数据的结构和类型无关,因此他们可以在从简单数组到高度复杂容器的任何数据结构上使用;
  4. 仿函数(functor)
    又称之为函数对象(function object),其实就是重载了()操作符的struct,没有什么特别的地方
  5. 迭代适配器(Adaptor)
  6. 空间配制器(allocator)
    其中主要工作包括两部分1.对象的创建与销毁2.内存的获取与释放

1.STL容器

1)序列式容器(Sequence containers)
vector、deque、list;

Vectors:
将元素置于一个动态数组中加以管理,可以随机存取元素(用索引直接存取),数组尾部添加或移除元素非常快速。但是在中部或头部安插元素比较费时;

Deques:
是“double-ended queue”的缩写,可以随机存取元素(用索引直接存取),数组头部和尾部添加或移除元素都非常快速。但是在中部或头部安插元素比较费时;

Lists:双向链表,不提供随机存取(按顺序走到需存取的元素,O(n)),在任何位置上执行插入或删除动作都非常迅速,内部只需调整一下指针;

2)关联式容器(Associated containers),元素位置取决于特定的排序准则,和插入顺序无关,
set、multiset、map、multimap;

Sets/Multisets:内部的元素依据其值自动排序,Set内的相同数值的元素只能出现一次,Multisets内可包含多个数值相同的元素,内部由二叉树实现(实际上基于红黑树(RB-tree)实现),便于查找;

Maps/Multimaps:Map的元素是成对的键值/实值,内部的元素依据其值自动排序,Map内的相同数值的元素只能出现一次,Multimaps内可包含多个数值相同的元素,内部由二叉树实现(实际上基于红黑树(RB-tree)实现),便于查找;

参考:
http://www.cnblogs.com/biyeymyhjob/archive/2012/07/22/2603525.html

版权声明:本文为博主原创文章,未经博主允许不得转载。

多年来,STL容器的使用总结!

第1条:慎重选择容器类型。 标准STL序列容器:vector、string、deque和list。 标准STL关联容器:set、multiset、map和multimap。 非标准序...
  • shaderdx
  • shaderdx
  • 2017年02月20日 16:31
  • 554

c++ STL总结

#define _CRT_SECURE_NO_WARNINGS #pragma warning(disable : 4996)#include using namespace std;#inclu...
  • sjtu_chenchen
  • sjtu_chenchen
  • 2015年09月16日 14:44
  • 364

《STL源码剖析》总结

 转载自 :http://blog.csdn.net/liguohanhaha/article/details/52089914 1、STL概述 STL提供六大组件,彼此可以组合套用: ...
  • shenya1314
  • shenya1314
  • 2017年02月08日 10:13
  • 1121

面试总结3--STL问题

1、 为何map和set的插入删除效率比用其他序列容器高?  因为对于关联容器来说,不需要做内存拷贝和内存移动。说对了,确实如此。map和set容器内所有元素都是以节点的方式来存储,其节点结构和链表...
  • u012286517
  • u012286517
  • 2015年11月02日 14:58
  • 770

STL容器知识总结

本文主要讨论C++标准库中的顺序容器及相应的容器适配器,这些内容主要涉及顺序容器类型:vector、list、deque,顺序容器适配器类型:stack、queue、priority_queue。 ...
  • qq_35535992
  • qq_35535992
  • 2016年12月02日 19:48
  • 75

C++:STL常用函数模块总结(vector)

所有资料来源于http://www.cplusplus.com/reference/,至于STL不介绍了,想了解的童鞋们直接百度吧,这里只总结常用模块的介绍和用法 vector容器相当于可变数组,相比...
  • IAMoldpan
  • IAMoldpan
  • 2017年10月08日 13:21
  • 571

STL常用函数总结

函数 描述 c.assign(beg,end) c.assign(n,elem) 将[beg; end)区间中的数据赋值给c。 将n个elem的拷贝赋值给c。 c.at(i...
  • xiaominkong123
  • xiaominkong123
  • 2016年06月22日 20:30
  • 205

STL中string用法总结

1.数值类型转换为string1.1使用函数模板+ostringstream使用函数模板将基本数据类型(整型、字符型、实型、布尔型)转换成string。//ostringstream对象用来进行格式化...
  • gyh_420
  • gyh_420
  • 2017年08月15日 16:45
  • 122

图论相关算法知识总结

今天是暑假集训的第四场比赛,题目稍微有难度,但是前三道还算比较水,第一道题因为是图论题,当时一看就是裸的tarjan算法的模板题,但是好久没写这算法,临时上网找的模板,可惜忘了重边处理,就没过,在此也...
  • uestct
  • uestct
  • 2015年07月19日 22:43
  • 77

c++之stl中的stack用法总结

stack概述stack是一种“先进先出(FIFO)”数据结构。不允许被遍历,没有迭代器。操作::empty();//判空 ::size();//元素个数 ::top();//返回栈顶元素的引用 ::...
  • u010902721
  • u010902721
  • 2015年05月15日 19:16
  • 2619
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:STL总结
举报原因:
原因补充:

(最多只允许输入30个字)