一、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_各容器的总结的更多相关文章

  1. STL_关联容器 VS C++ hashmap

    红黑树和哈希表区别: http://m.blog.csdn.net/article/details?id=52133283 关于STL中关联容器的几个问题: (1)为何map和set的插入删除效率比用 ...

  2. STL_容器使用时机

    1. 来自教程: ◆ Vector的使用场景:比如软件历史操作记录的存储,我们经常要查看历史记录,比如上一次的记录,上上次的记录,但却不会去删除记录,因为记录是事实的描述. ◆ deque的使用场景: ...

  3. STL_容器共通能力

    1. 来自教程: ◆ 所有容器提供的都是值(value)语意,而非引用(reference)语意.容器执行插入元素的操作时,内部实施拷贝动作.所以STL容器内存储的元素必须能够被拷贝(必须提供拷贝构造 ...

  4. STL_容器_删除

    1.erase()函数 用于删除由迭代器指定的元素,或者一个区间. 2.clear()函数 用于删除容器中所有元素 3.remove()函数 用于删除指定的元素,无需知道元素在容器的哪个位置,会删除掉 ...

  5. STL_常用的算法

    STL_常用的算法 一.常用的查找算法 adjacent_find() adjacent_find(iterator beg, iterator end, _callback); 在iterator对 ...

  6. docker——容器安装tomcat

    写在前面: 继续docker的学习,学习了docker的基本常用命令之后,我在docker上安装jdk,tomcat两个基本的java web工具,这里对操作流程记录一下. 软件准备: 1.jdk-7 ...

  7. 网页提交中文到WEB容器的经历了些什么过程....

    先准备一个网页 <html><meta http-equiv="Content-Type" content="text/html; charset=gb ...

  8. [Spring]IoC容器之进击的注解

    先啰嗦两句: 第一次在博客园使用markdown编辑,感觉渲染样式差强人意,还是github的样式比较顺眼. 概述 Spring2.5 引入了注解. 于是,一个问题产生了:使用注解方式注入 JavaB ...

  9. 深入理解DIP、IoC、DI以及IoC容器

    摘要 面向对象设计(OOD)有助于我们开发出高性能.易扩展以及易复用的程序.其中,OOD有一个重要的思想那就是依赖倒置原则(DIP),并由此引申出IoC.DI以及Ioc容器等概念.通过本文我们将一起学 ...

随机推荐

  1. HTML标签自定义属性

    本文章转载至:http://www.cnblogs.com/luoyanli/archive/2012/10/17/2727886.html HTML标签可以自定义属性,但是我们要考虑其在IE.Fir ...

  2. 3.WP8.1开发_为控件增加动画

    示例: 把一个按钮的宽度从100变到500 根据WPF的经验,会把代码写成如下: <Grid> <Button x:Name="btn" Content=&quo ...

  3. salesforce 零基础学习(六十七)SingleEmailMessage 那点事

    在salesforce开发中,发送邮件是一个很常见的功能.比如在进入审批流以后的通过和拒绝的操作需要发送邮件给记录的owner,和其他系统交互以后更改了某些状态通知相关的User或者Contact等等 ...

  4. 使用gem安装jekyll错误记录

    准备在windows7上安装Jekyll, 安装好了Ruby和RubyDevKit之后,准备使用: $ gem install jekyll 安装jekyll,但是返回错误: ERROR: While ...

  5. 小程序新能力-个人开发者尝鲜微信小程序

    个人开发者的福利 微信小程序,刚听到这个新名词的时候,我就兴冲冲的去找入口,看看自己能不能搞个微信小程序的HelloWorld,毕竟能在微信上把自己写的一些小工具跑起来还是满炫酷的. 没想,网上一查, ...

  6. java初学第二章

    这两天学习了基本的数据类型还有运算符. 分享一下学习过程还有写作~ 数据类型分为基本数据类型还有引用数据类型,基本数据类型有4类8种: 整型: byte,short,int,long 浮点型:floa ...

  7. vue2.0transition过渡的使用介绍

    直接上代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  8. 读书笔记 effective c++ Item 43 了解如何访问模板化基类中的名字

    1. 问题的引入——派生类不会发现模板基类中的名字 假设我们需要写一个应用,使用它可以为不同的公司发送消息.消息可以以加密或者明文(未加密)的方式被发送.如果在编译阶段我们有足够的信息来确定哪个信息会 ...

  9. POPTEST老李谈Debug和Release的区别(c#)

    POPTEST老李谈Debug和Release的区别(c#)   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣 ...

  10. poptest老李谈动态口令原理

    poptest老李谈动态口令原理     poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908 ...