
《C++ Primer》读书笔记
文章平均质量分 56
自己写的《C++ Primer》读书笔记,包含前三部分的全部章节,汇总之后分享给大家,献给C++学习征途上的小伙伴们~
Real_JumpChen
这个作者很懒,什么都没留下…
展开
-
《C++ Primer》读书笔记目录
目录:笔记会持续更新,有错误的地方欢迎指正,谢谢!第I部分 C++基础第一章:开始第二章:变量和基本类型-基本内置类型和变量第二章:变量和基本类型-复合类型和const限定符第二章:变量和基本类型-处理类型和自定义数据结构第三章:字符串、向量和数组-标准库类型string第三章:字符串、向量和数组-标准库类型vector第三章:字符串、向量和数组-迭代器介绍第三章:字符串、向量和数组-数组和多维原创 2017-12-27 17:39:31 · 1423 阅读 · 0 评论 -
《C++ Primer》读书笔记第一章
笔记会持续更新,有错误的地方欢迎指正,谢谢!第一章:开始语言常识一、C++进一步补充其基本特征的两种方法: 1.允许程序员自定义数据类型; 2.将有用的功能封装成库函数。 二、有两类语言: 1.动态数据类型语言:在程序运行时检查数据类型,比如:python; 2.静态数据类型语言:在编译时检查数据类型,比如:C++。一个简单的C++程序int main() { return 0原创 2017-09-05 09:12:16 · 827 阅读 · 2 评论 -
《C++ Primer》读书笔记第二章-1-基本内置类型 And 变量
笔记会持续更新,有错误的地方欢迎指正,谢谢!基本内置类型基本内置类型包括算术类型(包括字符、整数、布尔、浮点数)和空类型。算术类型1.同一类型的数据在不同机器上所占的内存是不一样的。 下面区分三个概念: - 比特(bit):位; - 字节(byte):可寻址的最小内存块,通常由8比特构成; - 字(word):存储的基本单元,通常由4个字节(32比特机器上)或8个字节(64比特机器上)构成。原创 2017-09-05 15:04:21 · 601 阅读 · 0 评论 -
《C++ Primer》读书笔记第二章-2-复合类型 And const限定符
笔记会持续更新,有错误的地方欢迎指正,谢谢!复合类型常用复合类型:引用和指针。引用引用不是对象,所以不能定义引用的引用 且 定义时必须初始化;它就是个绰号,但对它的操作都是在与之绑定的对象上进行的;引用一旦定义,无法再绑定到其他对象。即是一个很专一的绰号。 例题1: int &temp = 10; //错,引用的初始值必须是一个对象,不能是字面值或表达式的结果(比如:int &temp = 10原创 2017-09-05 15:59:50 · 603 阅读 · 0 评论 -
《C++ Primer》读书笔记第二章-3-处理类型 And 自定义数据结构
笔记会持续更新,有错误的地方欢迎指正,谢谢!处理类型类型别名类型别名是某种类型的同义词,它让复杂的类型名字变得简单。 有两种方法用于定义类型别名: 1.传统的方法:typedef double two; 2.新方法:使用别名声明:using SI=Sales_item;—-指针和谁都有一腿,既然有了个新东西,那指针又要来搞事情了 例子: typedef char *test; const原创 2017-09-06 00:47:08 · 547 阅读 · 0 评论 -
《C++ Primer》读书笔记第三章-1-标准库类型string
笔记会持续更新,有错误的地方欢迎指正,谢谢!前言:这一章我们主要介绍两种十分常用的标准库类型:string表示可变长字符串,vector表示可变长的容器。还会介绍迭代器,它是string和vector的配套类型,用于访问string中的字符或vector中的元素。在开始介绍标准库类型之前,先简单学习一下命名空间的using声明:我们用到的库函数基本都属于命名空间std,using namespac原创 2017-09-06 02:45:57 · 612 阅读 · 0 评论 -
《C++ Primer》读书笔记第三章-2-标准库类型vector
笔记会持续更新,有错误的地方欢迎指正,谢谢!vector表示对象的集合—>容器,容器里面装的都是同一个类型的对象。 要想使用vector,必须包含适当的头文件: #include <vector> using std::vector;C++语言有类模板(class template)。类模板本身不是类,可以看成一份类的说明,在我的理解中情况是这样的: 以vector<T>为例: vecto原创 2017-09-07 11:42:26 · 454 阅读 · 0 评论 -
《C++ Primer》读书笔记第三章-3-迭代器介绍
笔记会持续更新,有错误的地方欢迎指正,谢谢!前言:前面我们介绍了可以使用下标运算符来访问string对象的字符和vector对象的元素,这部分我们来介绍一种更通用的机制,迭代器。 为什么呢?因为所有的标准库容器都可以使用迭代器,但其中只有少数几种支持下标运算。另外,string虽不是容器,但支持迭代器。 迭代器作为for的判断条件时用==和!=,而不用<;下标作为for的判断条件时才用<。而str原创 2017-09-07 14:43:49 · 470 阅读 · 0 评论 -
《C++ Primer》读书笔记第三章-4-数组 And 多维数组
笔记会持续更新,有错误的地方欢迎指正,谢谢! 声明:如果这一章看不下去,跳过吧!用vector就足够了!数组数组和vector非常类似,不同在于数组的大小固定,但对某些特殊的应用来说,程序的运行时性能较好,相应地也损失了一些灵活性。定义和初始化内置数组const unsigned sz = 3;int a1[sz] = {0, 1, 2}; //此类都属于列表初始化,含有三个元素的数组,元素值分别原创 2017-09-07 16:59:54 · 500 阅读 · 0 评论 -
《C++ Primer》读书笔记第四章-1-基础 And 运算符
笔记会持续更新,有错误的地方欢迎指正,谢谢!前言: 1. C++ 提供了一套丰富的运算符,可以用于内置类型对象的操作。即便运算对象是自定义的类类型,C++也允许程序员指定这些运算符的含义(真的给了程序员很大的自由和挑战,第十四章才讲这个,等着吧23333)。 2. 本章主要介绍用于内置类型运算对象的运算符,简单介绍几种标准库定义的运算符。基础基本概念C++定义了两个概念: 一元运算符:作用于一原创 2017-09-07 20:07:43 · 476 阅读 · 0 评论 -
《C++ Primer》读书笔记第四章-2-类型转换
笔记会持续更新,有错误的地方欢迎指正,谢谢!隐式类型转换int a = 3.5 + 3.6; //a=7 算术类型之间的隐式转换原则是尽量避免损失精度。显示转换强制类型转换的四大天王:1.static_cast任何具有明确定义的类型转换,只要不包含底层const(所指对象为常量),都可以使用它:double k = static_cast<double>(j) / i;//把j转换成double就原创 2017-09-08 01:00:54 · 480 阅读 · 0 评论 -
《C++ Primer》读书笔记第五章-语句
笔记会持续更新,有错误的地方欢迎指正,谢谢!特别简单:1.一个表达式末尾加上分号就成了表达式语句。 2.用花括号括起来的是复合语句。 3.条件语句: else与离它最近的尚未匹配的if匹配。建议:if和else的花括号都写上,并注意缩进。switch结束的两种情况:1.遇到break;2.到了switch的结尾。即使不在default里做任何操作,最好也要写上。 4.迭代语句: while原创 2017-09-09 01:15:12 · 466 阅读 · 0 评论 -
《C++ Primer》读书笔记第六章-1-函数基础 And 参数传递
笔记会持续更新,有错误的地方欢迎指正,谢谢!前言:先介绍函数的定义和声明,参数传递和函数返回;重载函数:几个不同的函数用同一个函数名,匹配调用:调用的是哪个;最后介绍函数指针。本章有意思,一起吃鸡吧!函数基础遇到一条return语句时,结束执行过程,return语句完成两项工作: 1.返回return语句中的值 2.将控制权还给主调函数局部对象局部静态对象:不同于只存在于块执行期间的自动对象,局原创 2017-09-09 01:51:58 · 441 阅读 · 0 评论 -
《C++ Primer》读书笔记第六章-2-返回类型 And 函数重载
笔记会持续更新,有错误的地方欢迎指正,谢谢!返回类型只要函数的返回类型不是void,要保证任何情况都有返回值!有返回值的函数函数的返回类型是值类型,也就是说,返回值会被拷贝到调用点,这个函数在返回的时候会创建一个临时的对象,然后赋给调用点。 这样很浪费!我们当然可以不拷贝,怎么办呢,用引用啊~ 返回类型为引用:const string &shortStr(const string &s1, con原创 2017-09-15 21:46:01 · 463 阅读 · 0 评论 -
《C++ Primer》读书笔记第六章-3-特殊特性 And 函数匹配 And 函数指针
笔记会持续更新,有错误的地方欢迎指正,谢谢!特殊特性这次介绍三种函数相关的语言特性,都挺有用的。默认实参//窗口函数的声明如下,带默认实参string screen(int height = 24, int w = 80);我们可以为一个或多个形参定义默认值。注意,一旦某个形参被赋予了默认值,它后面的所有形参都必须有默认值。int f(int a = 24, int b); //这样的声明错误i原创 2017-09-15 23:38:37 · 583 阅读 · 0 评论 -
《C++ Primer》读书笔记第七章-1-抽象数据类型 And 访问控制与封装
笔记会持续更新,有错误的地方欢迎指正,谢谢!这一章是C++ 面向对象的重头戏,以后要转Java/C#的同学这一章要认真地看! 面向对象:把笔这个对象做成一个类,这个类描述了笔的特征,我们可以实例化这个类,从而产生对象(一只只的笔),而笔的使用者不需要关心笔是怎么造出来的,只要会用就好。类的基本思想是数据抽象和封装:数据抽象: 依赖封装。封装:实现了 接口和实现的分离。用户只能使用接口而无法访问原创 2017-09-16 13:03:30 · 461 阅读 · 0 评论 -
《C++ Primer》读书笔记第七章-2-类的其他特性 And 类的作用域
笔记会持续更新,有错误的地方欢迎指正,谢谢!类的其他特性包括:类型成员、类的成员的类内初始值、可变数据成员、内联成员函数,从成员函数返回*this,如何定义并使用类类型,友元类的更多知识。类成员再探可变数据成员 添加mutable关键字的数据成员,即使在const成员函数中,依旧可以被改变。 这个应用很少,了解即可~类类型对于一个类来说,我们必须定义它之后再去创建它的对象,不然编译器不知道给你这原创 2017-09-16 20:17:19 · 403 阅读 · 0 评论 -
《C++ Primer》读书笔记第七章-3-构造函数再探 And 类的静态成员
笔记会持续更新,有错误的地方欢迎指正,谢谢!构造函数再探构造函数初始值列表我们初始化 const数据 或 引用类型的数据 的唯一机会就是通过构造函数初始值,于是我们可以这么写:class ConstRef{public: ConstRef(int value) : i(value), ci(value), ri(i){}private: int i; const int原创 2017-09-16 20:29:23 · 495 阅读 · 0 评论 -
《C++ Primer》读书笔记第八章-1-IO库
笔记会持续更新,有错误的地方欢迎指正,谢谢!第二部分 C++标准库随着C++版本的一次次修订,标准库也越来越强大, 什么叫标准库呢?其实就是很多容器类和一族泛型算法(别急,后面章节会讲到),这些能帮我们编写简洁高效的程序,我们只需把精力放在求解问题上。IO库C++是通过标准库中的IO库来处理输入输出的,就是cin之类的东东。 别以为这章很简单,可是有大学问的,好好学吧~IO类继承机制: ifs原创 2017-09-17 19:38:17 · 897 阅读 · 0 评论 -
《C++ Primer》读书笔记第八章-2-文件输入输出 And string流
笔记会持续更新,有错误的地方欢迎指正,谢谢!文件输入输出头文件fstream定义了三个类型来支持文件IO:ifstream:从一个给定文件读取数据;ofstream:向一个给定文件写入数据;fstream:读写都行。fstream特有:打开文件绑定流的open()、关闭绑定文件的close()、文件是否成功打开且尚未关闭的is_open()。 因为fstream是继承自iostream的,原创 2017-09-18 01:24:45 · 738 阅读 · 0 评论 -
《C++ Primer》读书笔记第九章-1- 顺序容器概述 And 容器库概览
笔记会持续更新,有错误的地方欢迎指正,谢谢!顺序容器概述前言:这部分的内容在写程序的时候肯定是处处都能用到的,而且会让你的程序很简洁。本章是第三章的拓展,详细地介绍了标准库顺序容器的知识。一个容器就是一些特定类型对象的集合。不同容器在两个方面的性能不同:向容器中添加或删除元素;访问容器中的元素。详情如下: 容器 特征 vector 可变大小数组,支持快速随机访问,在尾部之外的位置原创 2017-09-18 23:59:32 · 823 阅读 · 0 评论 -
《C++ Primer》读书笔记第九章-2-顺序容器操作 And vector增长问题
笔记会持续更新,有错误的地方欢迎指正,谢谢!顺序容器操作前面介绍的那些是所有容器都支持的,我们接下来介绍的只适用于顺序容器。向顺序容器添加元素list<int> a = {1, 2, 3}; //a为{1, 2, 3}。a.push_back(4); //a为{1, 2, 3, 4},array和forwar_list不支持。a.push_front(0); //a为{0, 1, 2, 3, 4原创 2017-09-19 23:09:42 · 568 阅读 · 0 评论 -
《C++ Primer》读书笔记第九章-3-额外的string操作 And 容器适配器
笔记会持续更新,有错误的地方欢迎指正,谢谢!额外的string操作除了顺序容器的共同操作之外,string还有些额外操作,在此介绍。函数贼多,用到的时候再回来查找吧构造string的其他方法 构造string的其他方法 作用 string s(cp, n) s是cp指向的数组中前n个字符的拷贝 string s(s2, pos2) s是string s2从下标pos2开始的字符原创 2017-09-19 23:12:31 · 598 阅读 · 0 评论 -
《C++ Primer》读书笔记第十章-1-初识泛型算法 And Lambda
笔记会持续更新,有错误的地方欢迎指正,谢谢!概述容器是一个模板类,是在数据类型之上的那一层。C++提供一组算法,独立于任何特定的容器,这些算法是类型无关的,是泛型(generic)的。比如:find算法通过迭代器去依次访问元素,找到就停止,直到尾后元素,这些都不依赖于容器所保存的元素类型或者是容器类型,它就是迭代器去访问,也就是 迭代器让算法不依赖于容器。算法依赖于元素类型的操作。因为算法在执行时肯原创 2017-09-20 11:44:56 · 533 阅读 · 0 评论 -
《C++ Primer》读书笔记第十章-2-再探迭代器 And 泛型算法结构
笔记会持续更新,有错误的地方欢迎指正,谢谢!再探迭代器除了前面介绍的标准库容器迭代器外,C++还在头文件iterator中定义了额外的集中迭代器:插入迭代器:绑定到容器上,可用来向容器中插入元素。流(iostream)迭代器:绑定到输入输出流上,可用来遍历所关联的IO流。反向迭代器:跟普通的迭代器方向相反(forward_list没有这个,你懂得)。移动迭代器:是移动元素而不是拷贝元素(是不原创 2017-09-20 11:47:44 · 614 阅读 · 0 评论 -
《C++ Primer》读书笔记第十一章-1-关联容器概述
笔记会持续更新,有错误的地方欢迎指正,谢谢!前言:前面学的都是顺序容器,顺序容器中的元素是按它们在容器中的位置来保存和访问的。接下来这一章学习关联容器:关联容器中的元素是按关键字来保存和访问的。 关联容器与顺序容器的不同之处反映了关键字的作用。使用关联容器大多数程序员都很熟悉vector这一套,但很多人可能从未用过关联容器,接下来让大家看看关联容器在某些场合是多么牛逼。使用map我们要统计每个单原创 2017-09-22 16:47:40 · 677 阅读 · 0 评论 -
《C++ Primer》读书笔记第十一章-2-关联容器操作
笔记会持续更新,有错误的地方欢迎指正,谢谢!关联容器操作这部分的内容较多,但是顺序容器那部分掌握了,这里会很快,一通百通嘛。map的节点是一对数据,set的节点是一个数据。关联容器迭代器:map的value_type是pair,所以map迭代器只能改变关键字映射的值(mapped_type),不能修改关键字;set的value_type等于key_type,都是const关键字原创 2017-09-22 17:39:29 · 15030 阅读 · 10 评论 -
《C++ Primer》读书笔记第十二章-1-动态内存与智能指针
笔记会持续更新,有错误的地方欢迎指正,谢谢!这章是特别特别不想写的Emmmmmm这一章–>内存全局对象在程序启动时分配内存,在程序结束时销毁;对于局部自动对象,当我们进入其定义所在的程序块时被创建,在离开块时销毁;局部static对象在第一次使用前分配,在程序结束时才销毁。这些都是C++ 编译器帮我们管理的,对于这么爱赋予程序员自由的语言,C++也允许我们自己来决定,就是动态分配对象:动态分原创 2017-09-24 21:13:43 · 527 阅读 · 0 评论 -
《C++ Primer》读书笔记第十二章-2-动态数组 And 文本查询程序
笔记会持续更新,有错误的地方欢迎指正,谢谢!动态数组之前学到的那些动态内存分配,一次只能分配/释放一个对象,但某些应用需要一次为对象分配很多内存,C++语言定义了另一种new表达式语法,可以分配并初始化一个对象数组。虽然接下来要介绍动态数组,但一般情况下还是推荐使用容器。因为:使用容器的类可以使用默认版本的拷贝、赋值和析构操作;而分配动态数组的类必须自定义这些。蛋疼初始化动态数组可用空括号或花括号对原创 2017-09-26 11:27:45 · 454 阅读 · 0 评论 -
《C++ Primer》读书笔记第十三章-1-拷贝、赋值、销毁
笔记会持续更新,有错误的地方欢迎指正,谢谢!拷贝控制一个类可通过定义五种特殊的成员函数来控制拷贝、赋值、移动、销毁操作。 特殊的成员函数 控制类的行为 拷贝构造函数和移动构造函数 用同类型的另一个对象初始化本对象时做什么(class a(b)) 拷贝赋值运算符和移动赋值运算符 将一个对象赋予同类型的另一个对象时做什么(class a = b)...原创 2017-12-21 15:53:10 · 445 阅读 · 0 评论 -
《C++ Primer》读书笔记第十三章-2-拷贝控制、交换、动态内存管理类
笔记会持续更新,有错误的地方欢迎指正,谢谢!拷贝控制和资源管理拷贝语义:类的行为像值,有自己的状态;类的行为像指针,共享状态;IO和unique_ptr不允许拷贝或赋值,值和指针都不像.类值拷贝赋值:自赋值也是安全的,发生异常后左侧对象状态仍有意义;先拷贝构造右侧对象到临时变量,再销毁左侧成员并赋予新值。引用计数:用于类指针拷贝控制成员敏感词享状态,构造、创建副本、赋值左侧递增,销毁、赋值右侧递减。原创 2017-12-22 13:06:22 · 562 阅读 · 0 评论 -
《C++ Primer》读书笔记第十三章-3-对象移动
笔记会持续更新,有错误的地方欢迎指正,谢谢!对象移动移动对象的优势:我们在赋值操作时,对象拷贝后就立即销毁,但移动而非拷贝对象会大幅度提升性能。有些类型是不能被拷贝的,如IO类和unique_ptr,在旧标准中我们无法在容器中保存它们,因为它们无法被拷贝,就不存在赋值之类的操作。但引入了移动操作后,我们就可以用容器保存它们。右值引用通过&&来获得右值引用,右值引用只能绑定到一个即将销毁的对象上原创 2017-12-23 22:52:04 · 368 阅读 · 0 评论 -
《C++ Primer》读书笔记第十四章-1-重载IO、算术、关系等运算符
笔记会持续更新,有错误的地方欢迎指正,谢谢!这一章其实很简单,目的只有一个: 让我们使用自定义的类像使用内置类型一样,运算符的操作可通过重载自定义。基本概念规定重载运算符:函数名由关键字operator和其要定义的运算符号共同组成。重载运算符函数的参数数量与该运算符作用的运算对象数量一样,例如对于+,左侧运算对象传递给第一个参数,右侧运算对象传递给第二个参数。除了 operator()(重载原创 2017-12-24 01:21:20 · 525 阅读 · 0 评论 -
《C++ Primer》读书笔记第十四章-2-函数调用运算符
笔记会持续更新,有错误的地方欢迎指正,谢谢!函数调用运算符类包含状态所以比普通函数更灵活,如果类定义了调用运算符(),那么该类的对象叫作函数对象,因为可以调用这种对象,所以,我们说这些对象的行为像函数一样。带状态的函数对象类我们要写个打印string的类,默认情况下,我们的类会把内容写入cout中,每个string用空格隔开,也允许用户提供其他可写入的流及分隔符:class PrintString原创 2017-12-24 04:21:35 · 409 阅读 · 0 评论 -
《C++ Primer》读书笔记第十四章-3-类型转换运算符、二义性
笔记会持续更新,有错误的地方欢迎指正,谢谢!转换构造函数先来看看以前学的转换构造函数:string a = "haha";Sales_data b;b.combine(a); //combine接受一个Sales_data对象,但是一个string也行,因为隐式转换了。其实编译器用这个string构造了一个临时的Sales_data对象,用的就是只接受一个string的构造函数,所以搞了个定义原创 2017-12-24 05:59:05 · 438 阅读 · 0 评论 -
《C++ Primer》读书笔记第十五章-1-OOP概述、定义基类和派生类
笔记会持续更新,有错误的地方欢迎指正,谢谢!这是非常重要的内容,笔试面试的时候会经常考察这方面的知识~面向对象程序设计(OOP)基于三个基本概念:数据抽象(分离接口和实现)、继承(可定义相似的类型)、动态绑定(可在一定程度上忽略相似类型的区别,而以统一的方式使用它们的对象)。原来,我觉得有了类不就可以面向对象了吗?只要把实际中的对象抽象成类,好好设计一下,自己去定义构造函数、拷贝构造函数、重载一些运原创 2017-12-24 16:59:45 · 529 阅读 · 2 评论 -
《C++ Primer》读书笔记第十五章-2-虚函数、继承中的类作用域
笔记会持续更新,有错误的地方欢迎指正,谢谢!虚函数与普通函数一样,有个需要注意的地方是:既然默认实参可以在基类和派生类中都有,那我们最好让它们一致。实参值由本次调用的静态类型决定。抽象基类纯虚函数纯虚函数可清晰地告诉用户当前这个纯虚函数(net_price)是没实际意义的。在函数体位置写上=0就可以将一个虚函数说明为纯虚函数,只能出现在类内部的虚函数声明语句处://书店多种购书优惠政策问题clas原创 2017-12-24 22:32:42 · 500 阅读 · 0 评论 -
《C++ Primer》读书笔记第十五章-3-构造函数和拷贝控制、容器与继承
笔记会持续更新,有错误的地方欢迎指正,谢谢!构造函数和拷贝控制虚析构函数继承体系中的析构函数应该定义为虚函数。 以前说过,定义了析构函数就要定义拷贝和赋值,但这里基类的析构函数是例外。合成拷贝控制与继承派生类中定义为删除的拷贝控制与基类的关系class B{public: B(); //默认构造函数声明 B(const B&) = delete; //定义为删除的拷贝构造函数原创 2017-12-26 01:37:52 · 957 阅读 · 0 评论 -
《C++ Primer》读书笔记第十六章-1-定义模板
笔记会持续更新,有错误的地方欢迎指正,谢谢!这一章特别实用,神器—>模板泛型编程能处理在编译之前类型不知道的情况,在编译时获知类型,比如我们学过的容器、迭代器和算法都是泛型编程。模板是C++中泛型编程的基础,记住:一个模板就是一个创建类或函数的蓝图。定义模板函数模板要实现一个功能:比较两个值的大小。这两个值可能是int,, double, string等等,如果我们写出这些函数就会发现,它们除了参数原创 2017-12-26 13:41:52 · 836 阅读 · 0 评论 -
《C++ Primer》读书笔记第十六章-2-模板实参推断、可变参数模板
笔记会持续更新,有错误的地方欢迎指正,谢谢!模板实参推断本章内容不重要,了解即可~类型转换与模板类型参数类型参数转换:通常不转换而是生成一个新的模板实例;有限可用的转换规则包括const转换和数组或函数指针转换;非模板类型参数正常转换。函数模板显示实参显式模板实参:在函数之后,实参列表前用尖括号提供显式实参;只有尾部的显式模板实参,并且可从函数参数推断出来的时候,才可忽略;显式指定的实参可正常类型转原创 2017-12-26 13:43:16 · 1033 阅读 · 0 评论