STL — 7个常用容器的区别

转载 2017年09月11日 09:52:32

7个常用容器的区别

                                                                                               


1.STL容器分类:

STL的容器可以分为以下几个大类: 
一 顺序(序列)容器, 有vector, list, deque, string,stack( 适配器类), queue( 适配器类), priority queues( 适配器类)

二   关联容器,     有set, multiset, map, multimap, bitset,hash_set, hash_map, hash_multiset, hash_multimap

 

2.容器比较

  vector deque list set multiset map multimap
名称 向量容器 双向队列容器 列表容器 集合 多重集合 映射 多重映射

内部数

据结构

连续存储的数组形式(一端开口的组)

连续或分段连续存储数组(两端

开口的数组)

双向环状链表 红黑树(平衡检索二叉树) 红黑树 红黑树 红黑树

 

             
头文件 #include <vector> #include <deque> #include <list> #include <set> #include <set> #include <map> #include <map>
操作元素的方式 下标运算符:[0](可以用迭代器,但插入删除操作时会失效)

下标运算符或迭代器

只能用迭代器(不断用变量值来递推新值,相当于指针),不支持使用下标运算符

迭代器 迭代器 迭代器 迭代器
插入删除操作迭代器是否失效 插入和删除元素都会使迭代器失效 插入任何元素都会使迭代器失效。删除头和尾元素,指向被删除节点迭代器失效,而删除中间元素会使所有迭代器失效 插入,迭代器不会失效。删除,指向被删除节点迭代器失效 插入,迭代器不会失效。删除,指向被删除节点迭代器失效 插入,迭代器不会失效。删除,指向被删除节点迭代器失效 插入,迭代器不会失效。删除,指向被删除节点迭代器失效 插入,迭代器不会失效。删除,指向被删除节点迭代器失效

3.各容器特点比较以及选择

  vector deque list set multiset map multimap
名称 向量容器 双向队列容器 列表容器 集合 多重集合 映射 多重映射

特点

增加和获取元素效率

很高,插入和删除的

效率很低

 

增加和获取元素效率

较高,插入和删除的

效率较高

 

增加和获取元素效率

很低,插入和删除的

效率很高

1.键(关键字)和值(数据)相等(就是模版只有一个参数,键和值合起来)

2.键唯一

3.元素默认按升序排列

1.键和值相等

2.键可以不唯一

3.元素默认按升序排列

1.键和值分开(模版有两个参数,前面是键后面是值)

2.键唯一

3.元素默认按键的升序排列

1.键和值分开

2.键可以不唯一

3.元素默认按键的升序排列

定义容器

vector<string> book(50); deque<string> book(50); list<string> book; set<string> book; multiset<string> book; map<int,string> book; multimap<int,string> book;
               

 

4.各容器的图表说明

   4.1 vector

  4.2 deque

  4.3 list

  4.4 map/multimap

  4.5 set/multiset

本篇文章来源:http://blog.csdn.net/longhuahaha/article/details/8365041
举报

相关文章推荐

STL基础3:STL一些概念详解

要想真正的熟悉和深入了解STL,就必须先了解模版的概念(关于模版后面的发布文章会详解),这篇文章首先介绍STL的概念,分类,使用用例。 1.STL定义: 标准模版库简称STL,它是由惠普公司的Al...

STL 顺序容器,关联容器

向量 vector :   是一个线性顺序结构。相当于数组,但其大小可以不预先指定,并且自动扩展。它可以像数组一样被操作,由于它的特性我们完全可以将vector 看作动态数组。 在创建一个ve...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

设计模式C++实现(9)——享元模式

软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最...

STL基础4:STL7个常用容器的比较

1.STL容器分类: STL的容器可以分为以下几个大类:  一 顺序(序列)容器, 有vector, list, deque, string,stack( 适配器类), queue( 适配器类),...

设计模式C++实现(7)——外观模式、组合模式

软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最...

设计模式C++实现(5)——原型模式、模板方法模式

软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最...

STL基础2:模版迭代器的几点注意事项

以map容器为例: 第一:前置++和后置++的区别 1.使用typedef定义map容器的迭代器 typedef map::const_iterator CIT; 2.定义迭代器对象CIT ci...

设计模式C++实现(8)——代理模式

软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最...

设计模式C++实现(15)——观察者模式

软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最...

STL基础5:vector容器的使用总结

一.vector使用构造函数的四种初始化方式 //1.默认构造函数,长度为0的空向量  //vector v1;  //2.带有单个整形参数的构造函数,长度为50的空向量  //vector ...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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