<C++Primer>第四版 阅读笔记 第二部分 “容器和算法”
泛型算法中,所谓“泛型(generic)”指的是两个方面:这些算法可作用于各种不同的容器类型,而这些容器又可以容纳多种不同类型的元素。
第九章 顺序容器
顺序容器的元素排列次序与元素值无关,而是由元素添加到容器里的次序决定。
IO库类型不支持复制或赋值。因此,不能创建存放IO类型对象的容器。
定义容器的容器时,注意使用空格:
vector< vector<string> > lines; OK
vector<vector<string>> lines; ERROR
两个迭代器相加的操作是未定义的。
vector和deque容器提供了对元素的快速随机访问,但付出的代价是,在容器的任意位置插入或删除元素,比在容器尾部插入和删除的开销更大。list类型的任何位置都能快速插入和删除,但付出的代价是元素的随机访问开销较大。
在list容器的元素之间移动的唯一方法是顺序跟随指针。
string类型与vector容器不同的是,它不支持以栈方式操纵容器:在string类型中不能使用front、back和pop_back操作。
第十章 关联容器
关联容器与顺序容器的区别:关联容器通过键(key)存储和读取元素,而顺序容器则通过元素在容器中的位置顺序存储和访问元素。
关联容器支持通过键来高效地查找和读取元素。两个基本的关联容器类型是map和set。map的元素以键-值(key-value)对的形式组织:键用作元素在map中的索引,而值则表示所存储和读取的数据。set仅包含一个键,并有效地支持关于某个键是否存在的查询。
一般来说,如果希望有效地存储不同值的集合,那么使用set容器比较合适,而map容器则更适用于需要存储(乃至修改)每个键所关联的值的情况。
关联容器不能通过容器大小来定义,因为这样的话就无法知道键所对应的值是什么。
对于键类型,唯一的约束就是必须支持 < 操作。
map<K,V>::value_type 一个pair类型,它的first元素具有constmap<K,V>::key_type类型,而second元素则为map<K,V>::mapped_type类型。
在学习map的接口时,需谨记value_type是pair类型,它的值成员可以修改,但键成员不能修改。
map迭代器进行解引用将产生pair类型的对象。
使用下标访问map与使用下标访问数组或vector的行为截然不同:用下标访问不存在的元素将导致在map容器中添加一个新的元素,它的键即为该下标值。
--------------------经典的小代码--------------------
// count number of times each word occurs in the input
map<string,int> word_count; //empty map from string to int
string word;
while (cin>>word)
++word_count[word];
--------------------经典的小代码--------------------
在添加新的map元素时,使用insert成员可避免使用下标操作符所带来的副作用:不必要的初始化。
map对象中一个给定键只对应一个元素。如果试图插入的元素所对应的键已在容器中,则insert将不做任何操作。
查找并读取map中的元素:如果希望当具有指定键的元素存在时,就获取该元素的引用,否则就不在容器中创建新的元素,那么应该使用find。
set容器只是单纯的键的集合。set不支持下标操作符,而且没有定义mapped_type类型。与map一样,set容器存储的键也必须唯一,而且不能修改。
在获得指向set中某元素的迭代器后,只能对其做读操作,而不能做写操作。
在multimap中,同一个键所关联的元素必然相邻存放。
第十一章 泛型算法
关键概念:泛型算法永不执行容器提供的操作
理解算法的最基本方法是了解该算法是否读元素、写元素或者对元素进行重新排序。
初学者常犯的错误:在没有元素的空容器上调用fill_n函数(或者类似的写元素算法)。
流迭代器的限制:
1、不可能从ostream_iterator对象读入,也不可能写到istream_iterator对象中。
2、一旦给ostream_iterator对象赋了一个值,写入就提交了。赋值后,没有办法在改变这个值。此外,ostream_iterator对象中每个不同的值都只能正好输出一次。
3、ostream_iterator没有->操作符。
标准库定义了五种迭代器类型:输入、输出、前向、双向和随机访问迭代器。
算法从不直接改变它所操纵的序列的大小。(如果算法的实参是插入迭代器,则该迭代器会添加新元素,但算法并不直接这么做。)
待继续····
<C++Primer>第四版 阅读笔记 第二部分 “容器和算法”的更多相关文章
- C++ Primer 第四版阅读笔记
阅读笔记 初始化 变量定义指定了变量的类型和标识符,也可以为对象提供初始值.定义时指定了初始值的对象被称为是 已初始化的.C++ 支持两种初始化变量的形式:复制初始化和 直接初始化.复制初始化语法用等 ...
- <C++Primer>第四版 阅读笔记 第一部分 “基本语言”
之前阅读时没有及时总结,现在慢慢补上. 第1章 快速入门 main 函数在很多方面都比较特别,其中最重要的是每个C++程序必须含有 main 函数,且 main 函数是(唯一)被操作系统显示调用的函数 ...
- <C++Primer>第四版 阅读笔记 第四部分 “面向对象编程与泛型编程”
继承和动态绑定与数据抽象一起成为面向对象编程的基础. 模板使我们能够编写独立于具体类型的泛型类和泛型函数. 第15章 面向对象编程 面向对象编程基于三个基本概念:数据抽象.继承和动态绑定.在C++中, ...
- <C++Primer>第四版 阅读笔记 第三部分 “类和数据抽象”
类定义了数据成员和函数成员:数据成员用于存储与该类类型的对象相关联的状态:而函数成员则负责执行赋予数据意义的操作. 第12章 类 一个类可以包含若干公有的.私有的和受保护的部分:在public部分定义 ...
- C++Primer第5版学习笔记(四)
C++Primer第5版学习笔记(四) 第六章的重难点内容 你可以点击这里回顾第四/五章的内容 第六章是和函数有关的知识,函数就是命名了的代码块,可以处理不同的情况,本章内 ...
- C++Primer第5版学习笔记(三)
C++Primer第5版学习笔记(三) 第四/五章的重难点内容 你可以点击这里回顾第三章内容 因为第五章的内容比较少,因此和第四章的笔记内容合并. 第四章是 ...
- C++Primer第5版学习笔记(一)
C++Primer第5版学习笔记(一) 第一.二章的重难点内容 这个笔记本主要记录了我在学习C++Primer(第5版,中文版)的过程中遇到的重难点及其分析.因为第一.二章都比较简单,因 ...
- C++学习书籍推荐《C++ Primer 第四版》下载
百度云及其他网盘下载地址:点我 编辑推荐 <C++ Primer中文版(第4版)>对C++基本概念和技术全面而且权威的阐述,对现代C++编程风格的强调,使<C++ Primer中文版 ...
- C++Primer第5版学习笔记(二)
C++Primer第5版学习笔记(二) 第三章的重难点内容 这篇笔记记录了我在学习C++常用基本语法的学习过程,基本只记录一些重难点,对概念的描述不是一开始就详尽和准确的,而是层层深入 ...
随机推荐
- nginx location配置(URL)
语法规则: location [=|~|~*|^~] /uri/ { … }= 表示精确匹配,这个优先级也是最高的^~ 表示uri以某个常规字符串开头,理解为匹配 url路径即可.nginx不对url ...
- Nginx安装及配置虚拟主机
nginx安装部分 依赖环境 yum -y install gcc zlib openssl-devel zlib-devel 1. 下载好下面两个包:nginx-1.8.1.tar.gz pcre- ...
- Android 中内容提供者的使用
在Android中内容提供者主要是用于不同程序之间的数据共享.内容提供器的用法一般有两种,一种是使用现有的内容提供器来读取和操作相应程序的数据,另一种是创建自己的内容提供器,供其他的程序访问. 使用现 ...
- FZU 2112 Tickets
这个问题可以转变一下,先要知道有几个连通块,连通块之间肯定需要添加一条边, 还需要知道每个连通块内部需要添加几条边,这个问题等价于求一张图至少需要几笔画成,这个问题的答案是度为奇数的点的个数/2 #i ...
- collectionviewcell 添加删除按钮 响应区域的问题
在collectionviewcell 的右上角添加了一个删除按钮,但是发现只有cell和删除按钮重合的区域才会响应点击事件 后来doctor 李说这是iOS 事件响应链的机制(http://www. ...
- console 高级用法
console.log()用法,相信大家都很熟悉了,这里就不再啰嗦. 下面来玩几个新鲜点的,我用的是chrome28,不保证兼容其他浏览器:console.log的第一个参数中可以指定一个格式字符,这 ...
- nginx 特定目录禁止php执行
LNMP有一个缺点就是目录权限设置上不如Apache,有时候网站程序存在上传漏洞或类似pathinfo的漏洞从而导致被上传了php木马,而给网站和服务器带来比较大危险. 建议将网站目录的PHP权限去掉 ...
- iOS 倒出spa文件 打包
1. 修改Build Settings 修改 Code Signing: codesign failded 意思是签名错误,看看是否xcode -perferences是否没有登录,还有就是钥匙串密码 ...
- 在delphi中,DLL加载时做初始化的Demo
library DLLEntry;//dll源码 uses SysUtils, Classes, Dialogs, Windows; {$R *.res} procedure DLLEntryPoin ...
- 日历视图(CalendarView)组件的功能和用法
日历视图(CalendarView)可用于显示和选择日期,用户既可选择一个日期,也可通过触摸来滚动日历.如果希望监控该组件的日历改变,可调用CalendarView的setOnDateChangeLi ...