最近又重新拾起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. Blender Python脚本的6个技巧

    https://www.youtube.com/watch?v=vFoh3S8MLBI&index=3&list=PLw8Sjaw0TPm0J9DXj3XGi1_9fxXezlzrM ...

  2. VueJs学习参考的例子

    his is a vue+mint's demo ,for loler(PAD LOL) https://github.com/yuanman0109/vue2.0-Mint-lolbox   An ...

  3. docker上安装elasticsearch和ik分词器插件和header,实现分词功能

    docker run -di --name=tensquare_es -p 9200: -p 9300:9300 elasticsearch:5.6.8 创建elasticsearch容器(如果版本不 ...

  4. 【python原理解析】python中分片的实现原理及使用技巧

    首先:说明什么是序列? 序列中的每一个元素都会被分配一个序号,即元素的位置,也称为索引:在python中的序列包含:字符串.列表和元组 然后是:什么是分片? 分片就是通过操作索引访问及获得序列的一个或 ...

  5. 29.Mysql监控

    29.Mysql监控29.1 如何选择一个监控方案 29.1.1 选择何种监控方式 29.1.2 如何选择合适自己的监控工具29.2 常用网络监控工具 29.2.1 Cacti简介 29.2.2 Na ...

  6. TUN/TAP编程实现

    其实关于这两种设备的编程,基本上属于八股文,大家一般都这么干. 启动设备之前 有的linux 并没有将tun 模块编译到内核之中,所以,我们要做的第一件事情就是检查我们的系统是否支持 TUN/TAP ...

  7. 记一次python的任务调度模块apscheduler只在首次执行任务的情况

    最近需要写个日更新的程序,用time.sleep()不能很好的控制任务的执行时间 于是,就使用了python的任务调度模块apscheduler,这个模块功能真的是很强大 具体的就不多讲了 将任务程序 ...

  8. NCUAP 利用java自带方法实现导入excel取数据

    final JComponent parent = getModel().getContext().getEntranceUI(); JFileChooser chooser = new JFileC ...

  9. OpenCV-可视化界面Image Watch

    平台:Win10 x64+vs2015专业版+opencv-3.4.1-vc14_vc15 一直觉得OpenCV在调试方面不如MATLAB灵活方便,没成想OpenCV官方早就推出了一个叫Image W ...

  10. 渗透测试的理论部分2——OSSTMM的详细描述

    昨天休息了一天,今天我要连更两篇博客,作为补充,以下为正文 本章详细描述了OSSTMM内的RAV得分这一理论概念,对日后从事正规安全工作至关重要 OSSTMM为开源安全测试方法论,对OSSTMM不了解 ...