最近又重新拾起C++primer,发现每一次看都会有不同的体验,但每一次看后因为不常用,忘记得很快,所以记笔记是很关键的一环,咋一看是浪费时间,实际上是节省了很多时间。下面就把这一节的内容做一个简单的提炼和小节:

1、IO库类型不支持复制或赋值,因此,不能创建存放IO类型对象的容器。

2、在指定容器元素为容器类型时,必须如下使用空格:

vector< vector<string> > lines; //OK!

vector< vector<string>> lines;//ERROR! 像这样,系统会默认>>为单个符号

3、list容器的迭代器既不支持算术运算(加法或减法),也不支持关系运算(<=, <,>等),只提供前置和后置的自增、自减及相等(不等)运算。

vector<int>::iterator it = vec.begin() + vec.size()/2; //OK!而

list<int>::iterator it = lst.begin() + lst.size()/2; //ERROR!

4、悬垂指针

由悬垂指针可以引出野指针,垃圾内存以及内存黑洞等相关概念,我们一点点来看:

悬垂指针:当所指向的对象被释放或者收回,但是对该指针没有做任何修改,以至于该指针仍旧指向已经回收的内存地址,此情况下该指针便称为悬垂指针(也称迷途指针)。

一般以如下形式(C++)可以避免悬垂指针:

delete cp;

cp = NULL; //此处一定要记得!

野指针:其产生是由于某些指针在首次使用之前没有进行必要的初始化,这类指针就称为野指针。

垃圾内存:针对于某个指针来说,常常指不合法的内存,某些内存free或delete后没有将其设置为NULL,这样的内存就是垃圾内存。

内存“黑洞”:和上面三个完全不同的概念,特指对一个指针施加free或delete前就把这个指针设置为NULL,这样之后,这块内存并不属于编译器,它只属于某个变量的合法访问区域,但这个访问的指针已经不存在了,这样这块内存就像一个洞一样,曰为“黑洞”。

5、push_front()和pop_front()只适用于list和deque容器

v[n]和c.at[n]只适用于vector和deque容器

6、不要存储end操作返回的迭代器,添加或删除deque或vector容器内的元素都会导致存储的迭代器失效。

7、如果在不同(或相同)类型的容器内,元素类型不同但相互兼容,则其赋值运算必须适用assign函数,如:可通过assign操作实现将vector容器中一段char*类型的元素赋给string类型的list容器。

8、默认基础容器类型

默认的stack和queue都基于deque容器实现,而priority_queue则在vector容器上实现。

C++primer笔记之顺序容器的更多相关文章

  1. C++ Primer 第九章 顺序容器

    由于书籍上写的已经很经典了,故大部分用图片的形式来阐述概念,代码纯手打进行验证. 1.顺序容器类型:vector.deque.list.forword_list.array.string. 2.顺序容 ...

  2. C++ Primer : 第九章 : 顺序容器的操作以及迭代器失效问题

    顺序容器的添加.访问.删除操作以及forward_list的特殊操作,还有迭代器失效问题. 一.向容器添加元素 // array不支持这些操作 // forward_list有自己撰于的版本的inse ...

  3. C++ Primer : 第九章 : 顺序容器的定义、迭代器以及赋值与swap

    顺序容器属于C++ STL的一部分,也是非常重要的一部分. 顺序容器包括: std::vector,包含在头文件<vector>中 std::string, 包含在头文件<strin ...

  4. C++ Primer 有感(顺序容器)

    1.顺序容器的元素排列次序与元素的值无关,而是由元素添加到容器里的次序决定. 2. 顺序容器 vector                               支持快速随机访问 list   ...

  5. C++primer笔记之关联容器

    在这一章中,有以下的几点收获: 1.pair类型的使用相当频繁,如果需要定义多个相同的pair类型对象,可考虑利用typedef简化其声明: typedef pair<string, strin ...

  6. C++中如何在顺序容器中删除符合特定条件的元素

    以前很少做删除操作,vector一直当成数组用,而实际追求效率时又经常舍弃vector选用C风格数组.看<C++ Primer>到顺序容器删除这节时试着实现课后习题结果一动手我就出错了. ...

  7. C++ Primer 读书笔记: 第9章 顺序容器

    第9章 顺序容器 引: 顺序容器: vector 支持快速随机访问 list 支持快速插入/删除 deque 双端队列 顺序容器适配器: stack 后进先出栈 queue 先进先出队列 priori ...

  8. C++ Primer 笔记——顺序容器

    1.标准库中定义了一些顺序容器,所有顺序容器都提供了快速顺序访问元素的能力. 2.如果容器的元素类型没有默认构造函数,那么在构造这个容器的时候不能只指定这个容器的数目,因为没有办法默认构造这些元素. ...

  9. 《C++ Primer》笔记 第9章 顺序容器

    顺序容器类型 类型 解释 vector 可变大小数组.支持快速随机访问.在尾部之外的位置插入或删除元素可能很慢 deque 双端队列.支持快速随机访问.在头尾位置插入.删除速度很快 list 双向链表 ...

随机推荐

  1. springboot 整合 mybatis

    spirngboot 整合mybatis有两种方式 第一种 无配置文件注解版,这一种符合springboot的风格 第二种 有配置文件xml版本,这一种就是传统的模式 无论哪一种,首先都需要加入MyS ...

  2. 在网站中使用UEditor富文本编辑器

    UEditor是由百度WEB前端研发部开发的所见即所得的开源富文本编辑器,具有轻量.可定制.用户体验优秀等特点. 官网链接 进入到下载页面,选择相应的版本下载 这里我们使用ASP.NET开发,所以选择 ...

  3. django admin 模块添加 static

    目前路径是在 /var/www/jastme/static 但是admin的静态文件不在这个位置,那么怎么办呢? 首先到项目下,就是有manage.py的这个目录 编辑项目下的setting.py 首 ...

  4. document.getElementById(“id”)与$("#id")的区别

    document.getElementById("id")可以直接获取当前对象, jQuery利用$("#id")获取的是一个[object Object],需 ...

  5. 利用JS自动打开页面上链接的实现代码

    在这里做一下简单记录,防止自己忘记. 下面是实现自动点击打开链接的主要函数,功能不再细说,防止太多人滥用,有心的人一看就会明白,改把改把就是一个邪恶的程序: function randopen() { ...

  6. 167. Two Sum II - Input array is sorted (Array)

    Given an array of integers that is already sorted in ascending order, find two numbers such that the ...

  7. linux学习 (Linux就该这么学)

    明天周五了,7点准时上课,加油努力学习,12月份要考试了,心里没有底,加油吧!感觉要学的真多,! redhat7,,安装图形界面  yum install -y

  8. solr7.7.0搜索引擎使用(一)(下载安装)

    一.下载安装 可以直接在官网下载地址:https://lucene.apache.org/solr/ 解压之后,目录结构如下图,bin里边提供部署的文件,contrib提供额外的jar包,docs提供 ...

  9. .NET winform播放音频文件

    前提:最近要求做一个在winform端做一个音频文件播放的功能,至此,总结最近搜寻的相关资料. 一.微软提供了三种方式来播放音频文件 1.通过System.Media.SoundPlayer来播放 2 ...

  10. Python(五) 字典