C++ 常见容器
迭代器。
顺序容器。
通用概念。
顺序容器基本理解:按照顺序储存元素,并提供 元素具体操作(迭代器或其他) 和 顺序访问元素 的能力。
个人理解:
1)顺序:按照添加的先后次序排序。但,先进优先,还是后进优先取决于具体容器。
个人应用:
1)在可以使用容器时,尽量使用容器。因为你无法保证自己的算法优于整个开发组。
2)选择容器的基本原则(from C+ primer):
1,在不知道如何选择时,使用vector。
2,单个元素需求内存很小,内存紧缺时,不要使用list/forward_list。
3,已知添加操作时,尽量使用符合 原设计思想 的容器。例如:频繁的随机插入/删除,使用list/forward_list,而尽量不使用vector,deque。
4,举一反三:混合添加操作时,选择最频繁的添加操作,作为选择容器的标准。例如:100次后置添加 + 一次随机操作时,选择vector,deque。反之:list/forward_list。
5,举一反三:添加操作在某些阶段存在统一,则可以进行容器替换。例如:输入元素使用 list。输入结束后,使用vector储存(copy list),再进行读取操作。
3)尽量使用迭代器来操作容器——虽然有些容器支持下标。
vector容器:
一些细节:
1)使用连续内存保存元素。
2)可以下标访问元素(速度快)。可是当作动态数组使用。
3)中间添加/删除元素耗时。因,需要重新调整内存。同时会导致迭代器失效(大概率)。
4)添加新元素时(push_back),也可能重新分配内存。导致迭代器失效(中概率)。
5)容器存在增长方式:超出时,按照一定量增加内存,以保证添加数个元素后,才需要再次分配内存。量值可通过函数设定(不建议)。
deque容器:
一些细节:
1)使用连续内存保存元素。
2)不确定是否可以使用下标访问。
list容器:双向链表。
一些细节:
1)使用链表的思想。
2)额外内存开销相对较大。
3)不支持下标。
forward_list容器:
一些细节:
1)和list容器类似。
2)主要特征:单向链表。
array容器:
一些细节:
1)对数组的封装。加强安全性。
2)有数组的特性。
string容器:
一些细节:
1)使用连续内存保存元素。
2)用来保存字符串。
适配器:
概念:一个适配器是一种机制。通过适配器,可以使容器从行为上模仿其他数据结构。
顺序容器可用适配器:stack, queue, priority_queue。
个人理解:用来模拟一些通用的数据结构。如上:堆栈,队列。
疑惑:为何不直接做成容器?
无序容器。
基本常识:
1)主要为:map 和 set。衍生型:multi和unorder.例如:multimap, unorder_multimap.
2)使用pair作为单位元素。
1,key-value组成一个pair.
2,first成员:key。second成员:value。
3,key为const类型不可改变。
3)关联容器的构成:key-pair.
基本要点:
1)通常不对关联容器使用 泛型算法。
2)有序关联容器,有 严格弱序 的要求。默认使用 [<=]。当然,也可以使用谓词或lambda表达式来自定义。
C++ 常见容器的更多相关文章
- C++ STL中常见容器的时间复杂度和比较和分析
C++ STL中常见容器的时间复杂度 map, set, multimap, and multiset 上述四种容器采用红黑树实现,红黑树是平衡二叉树的一种.不同操作的时间复杂度近似为: 插入: O( ...
- 几种常见 容器 比较和分析 hashmap, map, vector, list ...hash table
list支持快速的插入和删除,但是查找费时; vector支持快速的查找,但是插入费时. map查找的时间复杂度是对数的,这几乎是最快的,hash也是对数的. 如果我自己写,我也会用二叉检索树,它在 ...
- [转] C++的STL库,vector sort排序时间复杂度 及常见容器比较
http://www.169it.com/article/3215620760.html http://www.cnblogs.com/sharpfeng/archive/2012/09/18/269 ...
- STL 常见容器
vector: 是一种在结尾处高效插入.删除的容器,本质上是一个动态数组,可以自动维护数组的空间分配.它也允许在开头和中间插入.删除数据,但是效率极低. <span style="fo ...
- 【转】C++ STL中常见容器的时间复杂度
map, set, multimap, and multiset 上述四种容器采用红黑树实现,红黑树是平衡二叉树的一种.不同操作的时间复杂度近似为: 插入: O(logN) 查看:O(logN) 删除 ...
- C++中使用sort对常见容器排序
本文主要解决以下问题 STL中sort的使用方法 使用sort对vector的排序 使用sort对map排序 使用sort对list排序 STL中sort的使用方法 C++ STL 标准库中的 sor ...
- python常见容器属性和方法
`````字符串中反斜杠字符表 转义格式 意义 \' 单引号(') \" 双引号(") \\ 反斜杠(\ ) \n 换行 \r 返回光标至行首 \f 换页 \t ...
- kotlin基础 常见容器的取值范围
- JDK里常见容器总结
自己总结. 扩容 线程安全 是否支持null 的key 说明 hashmap 2*length 否 是 1.8以后增加红黑树.提高检索效率 hashtable 是 否 官方不建议使 ...
随机推荐
- 软件测试作业三 尝试使用JUnit
写一个判断三角形种类的代码,对其进行测试. 判断三角形代码: package 测试1; public class sjx { public String f(int a,int b,int c) { ...
- c_str()函数
#include <string.h> const char *c_str(); 返回字符串地址,是一个c函数,返回类型const char*c_str()函数返回一个指向正规C字符串的指 ...
- 在CentOS 7下试验Drupal 7
按顺序安装好Apache.MariaDB和PHP,启动Apache和MariaDB,创建一个UTF-8字符集的数据库. > create database if not exists drupa ...
- Measuring Lengths in Baden
Description Measuring Lengths in Baden time limit per test: 2 seconds memory limit per test: 256 meg ...
- C/C++语言学习——内存分配管理
1.一个由C编译的程序占用的内存分为以下几个部分 1.栈区(stack)— 程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈.程序结束时由编译器自动释放. ...
- 使用PHP从web访问mysql数据库
一. web数据库构架的工作原理 1. 用户由浏览器发出HTTP请求,请求特定的web页面. 2. web服务器接受接收到对特定页面的请求,检索相应文件,并将其传递给php引擎处理. 3. php引擎 ...
- [WPF]ListView点击列头排序功能实现
[转] [WPF]ListView点击列头排序功能实现 这是一个非常常见的功能,要求也很简单,在Column Header上显示一个小三角表示表示现在是在哪个Header上的正序还是倒序就可以了. ...
- 微控制器(MCU)破解秘笈--背景知识
2.1 硅芯片安全措施的演变 工业控制器的硬件安全措施与嵌入式系统同时开始发展.三十年前的系统是由分离的部件如CPU,ROM,RAM,I/O缓冲器,串口和其他通信与控制接口组成的.如图2-1所示: 图 ...
- setAdapter(adapter)空指针nullPointer 解决办法
setAdapter(adapter)空指针nullPointer 解决办法 (2014-06-13 10:01:23) 转载▼ 标签: 旅游 分类: Android开发 如果setAdapter报空 ...
- perl HTML::TreeBuilder::XPath
HTML::TreeBuilder::XPath 添加XPath 支持HTML::TreeBuilder use HTML::TreeBuilder::XPath; my $tree= HTML: ...