1 vector

在C++中使用vector应该是非常频繁的,但是你是否知道vector在计算内存分配是如何么?

在c++中vector是非常类似数组,但是他比数组更加灵活,这就表现在他的大小是可以自动分配的,就是当你的数据量增大的时候,自动的为你分配空间,当你的分配的大小不够的时候,他就会在分配的内存后边增加2倍大小的空间,

vector增加的空间是连续的,因此这个就涉及到了,当你在后边的空间不够的时候,那么计算机就会把你的数据copy一份空间更大的地方来给你分配足够的空间,这,就给计算机带来了不必要的性能损失。

因此,在设计程勋的时候,如果频繁的增加空间,插入数据的时候,,你就应该考虑其他容器,比如Deque 容器,

deque 和vector一样都是标准模板库中的内容,deque 是双端队列,在接口上和vector 非常相似,在许多操作的地方可以直接替换。假如读者已经能够有效地使用vector容器,下面提供deque的成员函数和操作,进行对比参考。

因为Deque使用的是非连续的内存空间,有效的利用了内存空间,如果想知道 vector和deque比较的话,

请查看这篇文章http://www.cnblogs.com/me115/archive/2010/10/15/1852432.html  我在这里不做过多解释。

stack和queue  ,这个应该大家都知道堆栈和队列,这两个都不提供iterator操作。但是均可以作为list和deque的底层操作。

list ,双向链表,就是我们常说的环状的双向量表。list不是连续的内存空间,但是提供了iterator,环状的list在查找的等相当方便。。环状的list只需要一个标记,就可以完全的表示整个的list刻意的在环状的list尾端加一个空白节点,表示stl的前毕后开的区间。

slist也不是连续的内存空间。slist比list好用的空间更少。因为是单向的,因此有一些操作操作的速度更加快速。他无法提供向回的查找。因此slist使用insert和earse是相当不明智,因为他要重头查找。浪费时间了。

set set提供的是有排序的集合。自动排序。它属于红黑树的数据结构。

map,map在我们的程序是经常使用的,它提供了排序的功能和键值对的操作,通过key和value来查找。提供iterator.  推荐大家使用map

今天总结这些 更多文章,欢迎访问:http://blog.csdn.net/wallwind

解析STL中典型的内存分配的更多相关文章

  1. Java 中数组的内存分配

    Java 中数组的内存分配 1.Java 程序在运行时,需要在内存中分配空间.为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据和内存管理方式. 2.数组基本概念 数组是 ...

  2. 第10课 C++中的动态内存分配

    C++中的动态内存分配 C语言是通过库函数来完成动态内存分配的,而C++是通过关键字从语言层面支持的. C语言中的malloc是基于字节来进行内存申请的,C++中是基于类型来进行的. delete加上 ...

  3. C++解析(25):关于动态内存分配、虚函数和继承中强制类型转换的疑问

    0.目录 1.动态内存分配 1.1 new和malloc的区别 1.2 delete和free的区别 2.虚函数 2.1 构造函数与析构函数是否可以成为虚函数? 2.2 构造函数与析构函数是否可以发生 ...

  4. JAVA中堆栈和内存分配原理

    1.栈.堆 1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量 ...

  5. JAVA中堆栈和内存分配

    (一).栈.堆 1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或 ...

  6. STL源代码剖析(一) - 内存分配

    Allocaor allocator 指的是空间配置器,用于分配内存.STL中默认使用SGI STL alloc作为STL的内存分配器,尽管未能符合标准规格,但效率上更好.SGI STL也定义有一个符 ...

  7. 从malloc中窥探Linux内存分配策略

        malloc函数是C/C++中常用内存分配库函数,本篇文章将以Linux平台上的malloc为剖析对象,深入了解分配一块内存的旅程. malloc入门      使用malloc,需要包含头文 ...

  8. 谈谈Keil 中C51的内存分配与优化

    本帖最后由 Cresta 于 2014-1-21 10:49 编辑 看到这篇C51的内存分配和优化的文章,个人觉得分析的十分到位,在这里转给大家   C51的内存分配不同于一般的PC,内存空间有限,采 ...

  9. JAVA中堆栈和内存分配详解(摘抄)

    在Java中,有六个不同的地方可以存储数据: 1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存 ...

随机推荐

  1. 使用python将mysql数据库的数据转换为json数据

    由于产品运营部需要采用第三方个推平台,来推送消息.如果手动一个个键入字段和字段值,容易出错,且非常繁琐,需要将mysql的数据转换为json数据,直接复制即可. 本文将涉及到如何使用Python访问M ...

  2. lang

    我的docker容器里边,运行我的java进程时环境变量LANG为空导致乱码,重启java进程不为空显示正常:没有地方显式的设置过LANG,没找到/etc/(environment,profile,l ...

  3. Jobject 使用

    obj2 = JObject.Parse(result.Html); JArray _Jarr = _obj["data"]["siteList"].Value ...

  4. Mysql主从复制(基于Log)

    Master(主)操作 实验机:两台 IP:192.168.1.5      192.168.1.10 操作系统:Linux RedHat 6.5 Mysql版本:5.6.31 #  vim /etc ...

  5. Mybatis 示例之 Association - 偶尔记一下 - 博客频道 - CSDN.NET

    body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...

  6. Ubuntu“无法解析或打开软件包的列表或是状态文件”的解决办法。_StarSasumi_新浪博客

    Ubuntu"无法解析或打开软件包的列表或是状态文件"的解决办法. (2011-04-30 14:56:14) 转载▼ 标签: ubuntu apt 分类: Ubuntu/Linu ...

  7. linux 驱动入门2

    不吃苦中苦,难为人上人.努力,给老婆孩子提供个良好的生活居住环境. http://www.cnblogs.com/nan-jing/articles/5775038.html 这里提到.有这么多牛人. ...

  8. Struts2实现异步调用机制详细剖析(XML和JSON)

    一.使用XML传递 1.页面展示getXML.jsp <%@ page language="java" import="java.util.*" page ...

  9. Datetime.GetDateTimeFormats()的集合

    Asp.net中的日期处理函数//2007年4月24日this.TextBox6.Text = System.DateTime.Now.ToString("D");//2007-4 ...

  10. JNI 中文字符串传递(转)

    源:JNI 中文字符串传递 因为项目编码中通过JNI传递中文字符时出现乱码问题,特搜集了相关资料,整理如下: java内部是使用16bit的unicode编码(UTF-16)来表示字符串的,无论中文英 ...