C++primer
文章平均质量分 92
折途想要敲代码
_(:ι」∠)_好饿,但是不想动
展开
-
C++primer(第五版)第十九章(特殊工具与技术)
本章(也是最后一章)介绍了C++一些非常特殊的性质,对于大多数程序员来说很少会用到本章的内容.所以我就简简单单地过一遍().原创 2023-07-13 16:59:50 · 221 阅读 · 0 评论 -
C++primer(第五版)第十五章(面向对象程序设计)
面向对象程序设计(object-oriented programming)的核心思想是数据抽象,继承和动态绑定(个人认为应该是多态,但是书里原话是动态绑定,因此不太确定).一开始,C++只是C加上一些面向对象特性.C++最初的名称C with Classes 也反映了这个血缘关系 ——《Effective C++(第三版)》原创 2023-07-09 23:38:17 · 236 阅读 · 0 评论 -
C++primer(第五版)第十八章(用于大型程序的工具)
使用关键字namespace//将要放在命名空间里的声明和定义放在块内//类,变量(包括初始化操作),函数,模板,其他命名空间(!!!} //这里不用分号命名空间内可以写其他命名空间,但是命名空间不能定义在函数或类的内部.命名空间可以是不连续的,上上段代码可以是定义一个新的命名空间,也可以是为已有的命名空间添加新内容.因此可以将命名空间的声明和定义分文件编写.定义多个类型不相关的命名空间应该使用单独的文件分别表示每个类型.C++11新标准引入了一种新的嵌套命名空间,称为内联命名空间(原创 2023-07-12 17:57:45 · 187 阅读 · 0 评论 -
C++primer(第五版)第十四章(重载运算与类型转换)
C++primer原创 2023-07-08 17:23:14 · 165 阅读 · 0 评论 -
C++primer(第五版)第十三章(拷贝控制)
一个类通过定义五种特殊的成员函数来控制这些操作:拷贝构造函数拷贝赋值运算符移动构造函数移动赋值运算符析构函数。原创 2023-07-07 21:41:53 · 185 阅读 · 0 评论 -
C++primer(第五版)第十二章(动态内存)
C++中内存包含静态内存,栈内存,自由空间(堆).静态内存用于保存局部的static(静态)对象,以及定义于任何函数以外的变量(全局变量).栈内存用来保存定义在函数内的非static对象,由编译器自动创建和销毁.程序可以用堆来存储动态分配的对象,同时也需要由我们来显式地销毁.原创 2023-07-06 23:39:14 · 125 阅读 · 0 评论 -
C++primer(第五版)第十一章(关联容器)
关联容器不支持顺序容器的位置相关的操作,例如push_front,push_back.因为关联容器的元素是根据关键字存储的,因此只能插入(insert).初始化map可以参考我上面的代码,但是map和set都不允许有重复的关键字,但是编译器不会报错.重复定义的关键字不会存入map或set中.multimap或是multiset和maph,set不同的是它们可以有重复的关键字,因此初始化的时候就可以有多个相同的关键字.原创 2023-07-05 22:06:16 · 187 阅读 · 0 评论 -
C++primer(第五版)第十章(泛型算法)
大多数算法定义在头文件algorithm中.另外头文件numeric中定义了一组数值泛型算法.一般情况下算法不直接操作容器,而是通过迭代器来对元素进行处理,因此迭代器令算法不依赖容器,但算法依赖于元素类型的操作.泛型算法本身不会执行容器的操作,它们只会运行于迭代器之上.算法永远不会改变底层容器的大小,算法可能改变容器中保存的元素的值,但是不会直接添加或删除元素。原创 2023-07-04 21:11:25 · 135 阅读 · 0 评论 -
C++primer(第五版)第九章(顺序容器)
vector和string将元素保存在连续的内存空间中,所以每次添加或删除元素都会非常耗时,但是通过下标计算内存地址来读取元素是非常快的.list和为链表,添加或删除元素的操作很快,但是不支持元素的随机访问,为了访问一个元素,可能需要从头开始遍历整个容器..deque和vectorstring一样支持快速随机访问,forward_list和array是C++新标准增加的类型.array和数组使用上基本一致,但比原生的数组更安全,更容易使用(书上这么说).原创 2023-07-03 18:09:18 · 171 阅读 · 0 评论 -
C++primer(第五版)第十七章(标准库特殊设施)
访问tuple的成员不能使用迭代的方法,只能通过get来获取指定下标的成员,并且给定的索引不能是变量,只能是在编写程序时就写上的数字:通过get不仅能获取tuple的成员,还可以修改指定下标的成员:若是tuple的成员数量相同且各个对应下标的成员都可以进行比较的话,可以直接将两个tuple使用运算符进行比较.并且由于可以进行比较,tuple可以用于无序容器(set,map……)的关键字类型.可以结合上表参考下例// 1010// 1111// 1100。原创 2023-07-11 14:34:56 · 98 阅读 · 0 评论 -
C++primer(第五版)第八章(IO库)
未指定文件打开模式时,ifstream默认以in模式打开,ofstream默认以out模式打开,fstream默认以in|out模式打开(多种模式可以用(或)|来连接表示用多种方式打开文件).如果文件流对象被创建在一个作用域内(例如在循环体里),那么出了作用域则文件流对象被销毁,close()会自动被调用.每个输出流都管理一个缓冲区,用来保存程序读写的数据.缓冲区不刷新,数据就会一直停留在缓冲区.一个输出流关联另一个流,当读写被关联的流时,关联的流的缓冲区会被刷新.以out模式打开文件,会清空原文件内容.原创 2023-07-02 14:42:11 · 144 阅读 · 0 评论 -
C++primer(第五版)第七章(类)
定义一个抽象数据类型使用关键字struct或是clas(差别仅在于默认访问权限修饰符).//这是一个简单的类定义class Student{ //类名叫Student//string类型的成员变量namevoid sayHello(){ //返回值为vod的成员函数sayHello。原创 2023-07-01 16:18:30 · 289 阅读 · 0 评论 -
C++primer(第五版)第六章(函数)
前面说了,执行函数的第一步是隐式地定义并初始化函数的形参,而拷贝大的类型对象或者容器对象比较低效,使用引用类型的形参可以避免拷贝.(有时候刷力扣,暴力解法超时,但是把函数形参改成引用类型就有可能能通过,正是因为使用普通类型的形参直接拷贝实参比较低效).在函数声明的开头(返回值类型的前面)加上关键字inline可以将函数定义为内联函数,内联函数可以避免函数调用的开销.适用于优化规模较小,流程直接,频繁调用的函数.然而内联说明只是向编译器发出的一个请求,编译器可以选择忽略这个请求.原创 2023-06-30 09:58:35 · 214 阅读 · 1 评论 -
C++primer(第五版)第五章(语句)
复合语句是指用花括号括起来的语句(有可能是空语句,例如上面的例子),复合语句也称为块.块不以分号;结尾,所以在for,while之类的代码块结尾不加分号(虽然有些时候加上也没什么影响,但是同上面所说,最好不要有多余的空语句)try语句块:异常处理部分使用try语句块处理异常,子语句catch"处理"(实际上是我们处理)异常,它们都被成为异常处理代码.break终止距离最近的条件语句或迭代语句,并且从这些语句之后的第一条语句开始继续执行.定义在块中的变量仅在块中有效.块内定义的变量出了块就失效了.原创 2023-06-29 14:13:19 · 168 阅读 · 0 评论 -
C++primer(第五版)第十六章(模板与泛型编程)
关于模板,第一个要提的点就是,这个字念mu模板而不是mo(一开始打字就发现拼音错了,突然觉得自己要会小学深造一下).模板就是将一个特定场合使用的东西变成可以在多个场合使用的东西.原创 2023-07-10 17:55:06 · 236 阅读 · 0 评论 -
C++primer(第五版)第四章(表达式)
对于逻辑与运算符&&来说,只有两个运算对象都为真是为真,对于逻辑或运算符||来说,只要有一个运算对象为真就为真,所以为了减少运算,C++有一种短路求值的策略.即逻辑与运算符&&中的第一个运算对象为假即判断为假,不再去判断第二个运算对象.而逻辑或运算符||中,第一个运算对象为真即判断为真,不再去判断第二个运算对象.书中推荐使用递增和递减运算符的前置版本(即写在对象的左侧),因为前置版本将对象加一后直接返回,而后置版本则会将对象加一后暂时存储起来,在运算结束后再将加一后的值赋给对象,如此会增加了不必要的操作.原创 2023-06-28 13:20:39 · 205 阅读 · 0 评论 -
C++primer(第五版)第三章(字符串、向量和数组)
其中最常用的(对我而言)是第1,3,5种方法.如果使用等号初始化一个变量,也就是第三种和第五种方法,实际上执行的是拷贝初始化,编译器把等号右侧初始值拷贝到新创建的对象中.如果不使用等号,则是直接初始化.如果vector初始化的元素类型不支持默认初始化(例如int类型默认为0)那么则不能使用第五种方法,而必须提供初始化的元素值.push_back(val)可以将元素添加至vector的尾部,但使用范围for的时候不能使用该函数.或者说所有可迭代对象在使用范围for的时候都不可以改变对象的大小.原创 2023-06-27 21:00:00 · 157 阅读 · 0 评论 -
C++primer(第五版)第二章(变量和基本类型)
C语言中没有string字符串类型,C++中的string类型完整的写法是std::string,因为string是在命名空间std中定义的,目前只需要知道string是一种表示可变长字符序列的数据类型即可.在C++中初始化和赋值是两种完全不同的操作,初始化是创建变量时赋予一个初始值,赋值则是把对象当前的值擦除,用一个新值来替代.C++中初始化有好几种不同类型,以下四种方式都可以将整型变量初始化为0;int a=0;//我最常用int b={0};int c{0};int c(0);原创 2023-06-26 12:08:05 · 361 阅读 · 0 评论 -
C++primer(第五版)第一章(开始)
注释和C语言一样,多行注释不能嵌套.因调试而注释的代码建议用单行注释掉每一行.//单行注释/**多行*注释*/小节并没有详细介绍类,反而更多介绍了头文件.来自标准库的头文件,用尖括号来包含,并且标准库的头文件没有后缀.不属于标准库的头文件,即普通程序员所写的头文件,则用""双引号来包含,并且后缀一般用.h,但也有.H,.hpp,.hxx之类的后缀(我没见过).原创 2023-06-25 21:53:28 · 454 阅读 · 0 评论