stl_各容器的总结
一、stl容器总结:
1、以下的操作是在一千万的数据下操作。copy 都是在足够的空间下进行的copy,
测量方式:
std::clock_t start = std::clock();
//待测代码
std::clock_t end = std::clock();
1.1、array:
1、空间占用大小是:sizeof(value_type)* _Size.
2、空间占用比是:100%。
3、fill() :39
4、copy to array :15
5、copy to vector : 8
6、copy to list : 2200
7、copy to forward_list : 2929
8、copy to deque : 1386
9、算法sort:23102
10、算法reserve:726
11、算法count_if:298
1.2、vector:
1、空间占用大小是:sizeof(value_type) * size().
2、空间占用比是: (end() - begin()) / capacity().
3、resize:21
4、push_back :12973
5、copy to array :31
6、copy to vector : 9
7、copy to list : 2157
8、copy to forward_list : 2868
9、copy to deque : 1408
10、算法sort:23930
11、算法reserve:662
12、clear:69402
13、算法count_if:183
1.3、deque:
1、空间占用大小是:sizeof(value_type) * size().
2、空间占用比是: (end() - begin()) / capacity().
3、resize:14589
4、push_back :15119
5、copy to array :1955
6、copy to vector : 1937
7、copy to list : 4076
8、copy to forward_list : 4807
9、copy to deque : 3325
10、算法sort:119063
11、算法reverse:2592
12、clear:14633
13、算法count_if:2255
1.4、list:
1、空间占用大小是:sizeof(node) * size();
2、空间占用比是:100%。
3、resize:22795
4、push_back :24081
5、copy to array :3450
6、copy to vector : 3842
7、copy to list : 4387
8、copy to forward_list : 5115
9、copy to deque : 4293
10、算法sort:964291
11、clear:10887
12、算法count_if:2377
1.5、forward_list:
1、空间占用大小是:sizeof(node) * size();
2、空间占用比是:100%。
3、resize:16749
4、push_back :26468
5、copy to array :3324
6、copy to vector : 3834
7、copy to list : 4287
8、copy to forward_list : 5150
9、copy to deque : 4145
10、clear:8049
11、算法count_if:2411
1.6、multiset。
1、空间占用大小是:sizeof(_Tree_node) * size();
2、空间占用比是:100%。
3、insert:232277
4、copy to array :6182
5、copy to vector : 6703
6、copy to list : 7345
7、copy to forward_list : 8077
8、copy to deque : 7179
9、clear:10730
10、算法count_if:5234
2、算法和容器函数操作的对比:
将内存分配的时间一起算进去的话,算法需要的时间和容器本身方法操作需要的时间基本上是一样的。
3、总结:
3.1、array:
1、对array做一切的有内存变动的操作都是错误的,因为array的内存大小是固定的。
2、而array作为固定的连续空间的数组、内存结构简单、而且支持随机的访问,对其做数据的操作都是很快速的,也是非常的方便。
3.2、vector:
1、对于动态数组vector,内存结构也非常简单,唯一和array不同的地方是vector的内存大小可以改变。
3.3、deque:
1、deque是支持随机访问的,但是内存结构比array和vector复杂的,所以在对deque进行的很多数据的变动操作效率是不高的。
2、列如进行sort,reserve等等。总的来说相对于array和vector,deque并不是太友好。
3.4.、list:
1、list是双向的环形链表,内存结构离散,不支持随机访问。
2、但是list在进行数据的删除和插入的时候速度非常的快,因为只是指针之间指向的交换,不涉及数据的变动。
3、在存取数据的时候会比array和vector慢,当然对数据的访问也是比两者慢很多的。
3.5、forward_list:
1、forward_list的不同于list的地方是:forward_list是单向的链表,而end()直接就放回了一个nullptr
2、所以forward_list就是一条链,因为他相对于list少了一个指针的操作,所以在进行操作的时候会比较的方便,快捷一些,
3、但是这个效率并不会提高太多,可以说是差不多,但是forward_list会比list好维护一些。
3.6、map、set、multiset(允许重复)、multimap(key值允许重复):
1、这四个都是对_Tree进行了一个包装,数据结构就是一个红黑树。
2、对于红黑二叉树,其中在进行数据的存的时候,已经对数据进行一个排序
3、所以查找的效率非常高,但存数据时会比较耗时,同时其中的数据是不允许进行改动的。
stl_各容器的总结的更多相关文章
- STL_关联容器 VS C++ hashmap
红黑树和哈希表区别: http://m.blog.csdn.net/article/details?id=52133283 关于STL中关联容器的几个问题: (1)为何map和set的插入删除效率比用 ...
- STL_容器使用时机
1. 来自教程: ◆ Vector的使用场景:比如软件历史操作记录的存储,我们经常要查看历史记录,比如上一次的记录,上上次的记录,但却不会去删除记录,因为记录是事实的描述. ◆ deque的使用场景: ...
- STL_容器共通能力
1. 来自教程: ◆ 所有容器提供的都是值(value)语意,而非引用(reference)语意.容器执行插入元素的操作时,内部实施拷贝动作.所以STL容器内存储的元素必须能够被拷贝(必须提供拷贝构造 ...
- STL_容器_删除
1.erase()函数 用于删除由迭代器指定的元素,或者一个区间. 2.clear()函数 用于删除容器中所有元素 3.remove()函数 用于删除指定的元素,无需知道元素在容器的哪个位置,会删除掉 ...
- STL_常用的算法
STL_常用的算法 一.常用的查找算法 adjacent_find() adjacent_find(iterator beg, iterator end, _callback); 在iterator对 ...
- docker——容器安装tomcat
写在前面: 继续docker的学习,学习了docker的基本常用命令之后,我在docker上安装jdk,tomcat两个基本的java web工具,这里对操作流程记录一下. 软件准备: 1.jdk-7 ...
- 网页提交中文到WEB容器的经历了些什么过程....
先准备一个网页 <html><meta http-equiv="Content-Type" content="text/html; charset=gb ...
- [Spring]IoC容器之进击的注解
先啰嗦两句: 第一次在博客园使用markdown编辑,感觉渲染样式差强人意,还是github的样式比较顺眼. 概述 Spring2.5 引入了注解. 于是,一个问题产生了:使用注解方式注入 JavaB ...
- 深入理解DIP、IoC、DI以及IoC容器
摘要 面向对象设计(OOD)有助于我们开发出高性能.易扩展以及易复用的程序.其中,OOD有一个重要的思想那就是依赖倒置原则(DIP),并由此引申出IoC.DI以及Ioc容器等概念.通过本文我们将一起学 ...
随机推荐
- Linux+Nginx+Asp.net Core部署
上篇<Docker基础入门及示例>文章介绍了Docker部署,以及相关.net core 的打包示例.这篇文章我将以oss.offical.site站点为例,主要介绍下在linux机器下完 ...
- JVM中堆内存和栈内存的区别
Java把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配.当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间 ...
- kvm的sshd起不来
同事不知道在一台KVM虚拟机执行了chmod -R 777 / 将更目录中的所有文件的权限都改为777,重启该虚拟机之后发现该虚拟机登不上去了,来找我,我尝试重启了几次虚拟机之后,发现总是可以被pi ...
- mysql创建数据表时如何判断是否已经存在?
>>> create table if not exists people(name text,age int(2),gender char(1)); 如上代码表示创建一个名为peo ...
- MVC学习笔记2 - Razor语法
Razor 同时支持 C# (C sharp) 和 VB (Visual Basic). C# 的主要 Razor 语法规则 Razor 代码封装于 @{ ... } 中 行内表达式(变量和函数)以 ...
- vue2.0自定义指令的使用方法
感觉2.0好坑啊,自定义指令和1.0完全不一样,并且文档写得也不太清晰,下面是我写得一个demo,希望帮助大家更好地理解自定义指令 <!DOCTYPE html> <html lan ...
- 关于oracle后导数据的一些小TIPS
今天下午需要把一些数据导入到正式环境中,但是通过Excel拷贝进去行会错位,把excel的每一列的双击让其变为最宽即可解决该问题
- 【VB超简单入门】六、基本数据类型
接下来要介绍VB的基本数据类型,为接下来学习变量和常量准备. 计算机只能处理二进制的数据,所以无论什么数据,在CPU里面处理都是一样的,类似101010这样的机器代码,但是让我们直接去写机器代码程序, ...
- [SinGuLaRiTy] 2017-03-30 综合性测试
[SinGuLaRiTy-1014] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 对于所有的题目:Time Limit:1s | Me ...
- 【转】AS3多种天气预报调用代码分享
今天我们来介绍利用weather.com.cn上的天气预报功能,这里介绍了大家常用的,其它的大家可以自己去下载. 我们这里的天气预览不需要js来调用,只要用iframe就可以了,更不需要ASP/' t ...