C++学习笔记
C++学习笔记
麦芒随笔
读书笔记
展开
-
二叉树的遍历
//二叉树前序遍历(递归版)template <typename T, typename VST>//模板void travPre_R(BinNodePosi(T) x, VST & visit)//适用函数对象{ if (x == nullptr) return; visit(x->data); travPre_R(x->lc, visit); travPre_R(x->rc, visit);}//二叉树中序遍历(递归版)template <原创 2021-06-13 19:54:41 · 184 阅读 · 0 评论 -
求斐波那契数列
求斐波那契数列第n项/*斐波那契数列的求解*///递归,时间复杂度O(2^n)int fib1(int n) { if (n < 3) return 1; return fib1(n - 1) + fib1(n - 2);}//迭代,动态规划,时间复杂度O(n)int fib2(int n) { if (n < 3) return 1; int dp1 = 1; int dp2 = 1; int dp3; for (int i = 2; i < n; i++) {原创 2021-05-15 12:37:40 · 184 阅读 · 0 评论 -
C++阅读
宏#pragma once的用法及其与#ifndef的区别https://www.cnblogs.com/qiang-upc/p/11407364.html原创 2021-04-25 21:12:48 · 129 阅读 · 0 评论 -
Leetcode或VS代码报错
Leetcode代码报错C++错误一报错Line 1033: char 9: reference binding to null pointer of type ‘int’ (stl_vector.h)错误原因:定义vector customers;没有定义向量长度;更正:vector customers(n);原创 2021-02-24 11:36:46 · 109 阅读 · 0 评论 -
C++笔记(22)——this指针、对象数组、类作用域
1、this指针类的每一个成员函数都有一个this指针,该指针指向调用成员函数的对象,被作为隐藏参数传递给成员函数。在成员函数的括号后面加const限定符时,无法通过this指针修改对象的值。使用示例:比较两个对象数据成员的大小时,程序无法直接访问对象数据,可以通过成员函数,成员函数返回值到程序中再比较。也可以设计一个成员函数,可以访问两个对象的数据,但需要第二个对象作为参数(即成员函数的参数为该类的一个对象),如下图:2、对象数组声明像普通数组一样,形式如下:Stock mystu原创 2020-07-19 15:34:26 · 213 阅读 · 0 评论 -
C++笔记(21)——类的构造函数和析构函数
1、构造函数Stock();Stock(...,...,...)构造函数名称和类名相同原型和函数头没有声明类型,没有返回值,用来创建对象(声明对象时自动调用构造函数然后分配存储空间)和初始化对象。上节中的图中代码示例如法对数据成员初始化,私有部分无法访问,只能通过构造函数初始化。如果不声明构造函数,那么编译器会自动调用一个默认构造函数,该默认构造函数不做任何工作。如果在定义了构造函数,则必须再提供一个默认函数,提供的默认函数包括两种形式:(1)没有参数,但可以在后续定义该默认构造函数时对对象原创 2020-07-18 20:10:51 · 161 阅读 · 0 评论 -
C++笔记(20)——类和对象入门
类将数据表示和操纵数据的方法组合成一个整洁的包,这是类最吸引人的地方,包括类成员(包括数据成员和成员函数)声明和类方法定义两部分。一般将数据成员设为私有,将成员函数设为共有作为接口,程序员通过使用类方法作为接口去操作数据成员。数据成员也可以设为共有,但一般不这样做,因为数据隐藏本身就是类和对象思想的一个重要体现,类似于服务器和客户端,服务器是类声明,客户是使用类的程序,程序员只需要通过类方法去利用数据成员,知道输入什么参数放回什么结果,不需要了解数据如何表示,也不需要了解如何实现,后续如需修...原创 2020-07-18 19:55:10 · 136 阅读 · 0 评论 -
C++笔记(19)——存储的持续性、作用域和链接性
1、定义作用域(scope): 描述了名称在文件的多大范围内可见。如:函数中定义的变量只在该函数中使用;文件中函数之前定义的变量可以在所有的函数中使用。函数原型作用域中使用的名称只能在包含参数列表的括号内使用。链接性(linkage):描述了名称如何在不同单元之间共享。链接性为外部链接的可以在文件间共享;为内部链接的可以在文件内的函数共享;没有链接性的不能共享。2、自动存储变量在函数中声明的函数参数和变量的存储持续性为自动,作用域为局部,没有链接性。在代码块(花括号括起来的)定义的变量作用域原创 2020-07-16 17:31:15 · 172 阅读 · 0 评论 -
C++笔记(18)——单独编译
将组件函数放在独立的文件中,可以单独编译这些文件,每次修改后可以只重新编译修改的文件即可,然后将其余其他文件的编译版本连接。当不同的函数都是用同一个结构时,两个文件都应该包含结构的声明。所以,可以通过将结构放在头文件中,其他文件包含该头文件即可。头文件一般包括:(1)函数原型(不要放函数定义);(2)使用#define或const定义的符号常量;(3)结构声明;(4)类声明;(5)模板声明;(6)内联函数。注意:不要将函数定义和变量声明放在头文件中。对头文件“coordin.h”和<c原创 2020-07-16 16:37:32 · 558 阅读 · 0 评论 -
C++笔记(17)——函数模板、关键字decltype和后置返回类型
需要对不同类型使用同一算法时,可以选择使用函数模板。模板不能压缩可执行程序,编译后的代码不包含模板,只包含实例函数。常规模板:一般使用的模板,其中class也可以用typename;但有时候常规模板不能满足,如交换两个变量值时,数组不能从一个变量赋值给另一个变量(结构可以),当要交换结构中部分变量的值时,这是可以使用具体化模板。优先级顺序:非模板函数>显示具体化模板>常规模板。隐式实例化即将常规模板实例化,显示实例化如上图所示形式(比具体化模板少了<>),显示实例化可原创 2020-07-15 23:35:22 · 447 阅读 · 0 评论 -
C++笔记(16)函数默认参数和函数重载
1、默认参数默认参数指的是函数调用时省略了一个实参时,自动使用默认值。函数默认值的设置,必须通过函数原型,方法是将默认值赋给原型中的参数。注意,对含有多个参数的函数,默认值必须放在右边,即如果某一位提供了默认值,其后面所有参数都得有默认值。这样,实参数少于型参数时,将从左到右的顺序分配给形参。2、函数重载函数重名,但参数列表不同,参数列表即函数特征标。C++函数名可以相同,但参数不可相同。编译器在检查特征标时,将类型引用和类型本身视为同一特征标。当没有函数重载时,若实参与形参不匹配,C++尝试使原创 2020-07-15 12:58:41 · 344 阅读 · 0 评论 -
C++笔记(15)——内联函数、引用变量
1、内联函数在声明或定义前加inline关键字,编译器在编译时直接用相应的函数内容代替函数调用,执行时遇到函数调用无需来回跳。内联函数执行速度比常规函数快,但要占用较多内存。一般使用于函数短小而又多次被调用的情况。如:inline double square(double x) {return x*x;};在C语言中,预处理器使用语句#define来提供宏,例如:#define SQU...原创 2020-07-15 01:13:50 · 385 阅读 · 0 评论 -
C++笔记(14)——函数与结构、string对象和array对象
就像前面可以将一个结构赋值给另一个结构一样,结构也可以作为参数直接传递,且函数使用结构的副本。当然,函数也可以返回结构。与数组名表示第一个元素的地址不同,结构名只是名称,要获得结构的地址,必须使用地址运算符&。因为使用的式结构的副本,所以在函数处理结构时,需要复制结构,因此需要增加内存,所以有些程序员倾向于传递结构的地址,然后使用指针来访问结构的内容。C++中第三种方式是使用引用传...原创 2020-01-13 01:10:50 · 303 阅读 · 0 评论 -
C++笔记(13)——函数与数组和C风格字符串
1、将数组作为参数传给数组,需要传递数组的类型、地址和元素数。对一维数组,一般形如:int sum_arr( int arr[], int n );//其中,arr为数组名,在函数组做指针处理,n为数组元素数,等同于int sum_arr( int *arr, int n );如果函数只读数组,不能修改,则使用形如:int sum_arr( const int arr[], int n...原创 2020-01-12 22:33:33 · 128 阅读 · 0 评论 -
C++笔记(12)——简单文件输入/输出
1、写入到文本文件(1)#include <fstream>(2)命名空间std(3)声明ofstream对象,例如:ofstream outFile;(4)将ofstream对象和文件联系起来,常用方法:outFile.open("carry.txt");如果文件carry.txt不存在,默认新建,如果已存在,默认将原有内如丢弃,此处容易发生危险。而且,有可能打开文件...原创 2019-12-27 14:25:25 · 367 阅读 · 0 评论 -
C++笔记(11)——逻辑运算符、字符函数库cctype、switch语句
1、逻辑运算符:或 ||,与 &&,非 ! (C++中可以使用or,and,not,C语言中则需要使用头文件iso464.h后才能使用)逻辑运算符||和&&优先级比算数运算符和关系运算符低,运算符是一个顺序点,也就是:运算符左边的子表达式先于右边的子表达式,对||左边为true为真时,右边的子表达式不再去判断。对&&左边为false为真时,右边的...原创 2019-12-27 01:14:45 · 574 阅读 · 0 评论 -
C++笔记(10)——循环和关系表达式
1、C语言中,要求for循环使用三个完整的表达式,如for(i=0;i<5;i++),在C++中,第一个表达式可以使用声明,如for(int i=0;i<5;i++)。for循环的循环体,如果是单个语句,可以不用花括号,若是多个语句,则需要使用复合语句(代码块)。副作用:在计算表达式时对某些东西进行了修改;顺序点:程序执行过程中的一个点,在进行下一步之前,对所有副作用进行评估,...原创 2019-12-26 22:25:14 · 222 阅读 · 0 评论 -
C++笔记(9)——模板类vector和array
模板类vector和array是数组的替代品。1、模板类vector模板类vector类似于string类,是动态数组,可在运行阶段设置其长度,也可在其末尾附加新数据或在中间插入新数据,本质使用new和delete管理内存因此为自由存储区。需要头文件#include <vector>,命名空间为std,使用using namespace std;或std::vector;使...原创 2019-12-20 20:52:37 · 193 阅读 · 0 评论 -
C++笔记(8)——自动存储、静态存储和动态存储
1、自动存储自动变量是一个局部变量,作用域为代码块(函数中可包含代码块),作用周期为其所在函数的执行期间,其所在函数执行结束时即消亡。自动变量存储在栈中,后进先出,所以程序执行时,栈的大小不断变化。2、静态存储静态存储时全局变量,作用周期是整个程序执行期间。声明方式,一种是在函数外,一种是只用static关键字。3、动态存储new和delete管理一个内存池即自由存储空间或堆,...原创 2019-12-20 18:59:59 · 267 阅读 · 0 评论 -
C++笔记(7)——指针
指针是一个变量,其存储的是值的地址而不是值本身即地址是指定量,而值是派生量,求指针ptr处存储的值,用*ptr获得;常规变量,值时指定量,而地址是派生量,常规变量MEM的地址用&MEM求得,一般用十六进制表示。1、指针的声明和初始化指针声明时必须声明指针指向的数据的类型。注意,指针创建之后,计算机为其分配了用来存储地址的内存,但不分配用来存储指针所指向的数据的内存。所以应先初始...原创 2019-12-20 18:48:12 · 236 阅读 · 0 评论 -
C++笔记(1)——第三章 处理数据
1、在C++中,单字符用单引号,如‘M’;字符串用双引号,如“hello”。2、字符类型char实际存储为整型,可对char类型变量进行整数操作;3、cout.put()函数用于显示一个字符;4、转义字符的表示:符号转义序列表示法:例如换行符在代码中直接使用“\n”;数字转义序列表示法:使用‘\’加对应的八进制或十六进制ASCII码,例如换行符:‘\xA’或‘\xa’或‘\...原创 2019-12-16 22:25:59 · 124 阅读 · 0 评论 -
C++笔记(6)——枚举
enum关键字,spectrum称为枚举,band称为枚举变量,花括号中的red、orange等被称为枚举量,其值被称为枚举值。6、可对枚举量进行显式地赋值,例如:enum bits {one=1,two=4,four=16};指定的值必须是整数,也可以只显式地赋值一部分枚举量,则第一个默认为0,被赋值枚举变量后面没有被赋值的枚举变量的值在赋的值基础上顺次加1,赋的值也可以可...原创 2019-12-19 18:38:16 · 215 阅读 · 0 评论 -
C++笔记(4)——结构
数组中元素的类型必须全部相同,而结构可以存储多种类型的数据。用户自定义结构的类型之后,即可创建相应类型的结构变量(或结构对象)。格式:#include <string>using namespace std;struct people //stuct关键字;people为新类型的名称{ string name; //声明语句...原创 2019-12-19 17:35:25 · 77 阅读 · 0 评论 -
C++笔记(3)——复合数据类型
1、数组声明形式:typename arrayname[arraysize];初始化形式:typename arrayname[arraysize] = {......};所有元素类型必须相同,大小在声明或初始化时确定,不能使用变量(可以使用new运算符来解决)。sizeof arrayName得到整个数组的字节数;sizeof arrayName[n]得到数组中一个元素的字节数。...原创 2019-12-19 16:51:18 · 324 阅读 · 0 评论 -
C++笔记(2)——数据类型转换
1、将一种类型的值赋值给另一种类型的变量,则自动转化为接收类型的变量。2、表达式中包含不同类型时,对值进行转换。在计算表达式时,C++将bool、char、unsigned char、signed char和short值转化为int,true转化为1,false转化为0,这些称为整形提升(integral promotion)。不同类型进行算数运算时,(1)如果有一个操作数类型为lon...原创 2019-12-17 01:13:42 · 240 阅读 · 0 评论