
c++ 学习记录
c++ 学习记录
卡、
这个作者很懒,什么都没留下…
展开
-
c++ 虚函数和多态、虚函数表
参考:1、c++ primer plus 第六版2、中国大学慕课:程序设计与算法(三)基本概念:虚函数:在类的定义中,前面有virtual关键字的成员函数就是虚函数class A{public: //类中函数声明 virtual void Function();}//类外函数定义void A :: Function(){}说明:1、virtual关键字只需要在类定义里的函数声明时加上,函数定义时不用加2、构造函数和静态成员函数不能是虚函数3、析构函数应当是虚函数4、原创 2020-05-22 21:50:55 · 276 阅读 · 0 评论 -
c++ 继承
类继承:从原有的类派生出新的类,派生的类继承了原有的类的所有成员。.继承类型当一个类派生自基类,该基类可以被继承为 public、protected 或 private 几种类型。继承类型是通过上面讲解的访问修饰符来指定的。我们几乎不使用 protected 或 private 继承,通常使用 public 继承。当使用不同类型的继承时,遵循以下几个规则:1、公有继承(public):当一个类派生自公有基类时,基类的公有成员也是派生类的公有成员,基类的保护成员也是派生类的保护成员,基类的私有成员原创 2020-05-21 17:21:13 · 175 阅读 · 0 评论 -
c++ 两行代码求二叉树的深度
今天刷题遇到需要求树的深度的问题,发现代码居然如此简短,记录一下:代码:int TreeHeight(TreeNode* &treeNode){ if(treeNode) return 1+max(TreeHeight(treeNode->left),TreeHeight(treeNode->right)); return 0;}把代码展开一下: int TreeHeight(TreeNode* &treeNode){ //判断是否为空节点原创 2020-05-21 11:55:06 · 380 阅读 · 0 评论 -
根据二叉树先序中序后序遍历结果重建二叉树 详细解释
首先得明白什么是二叉树的先序中序后序遍历:c++ 二叉树的创建 前中后序遍历 以及遇到的坑给出先序和中序遍历重建二叉树:思路:1、二叉树的先序遍历的第一个结点是根节点;2、中序遍历的根节点左边的序列是左子树的结点,右边的序列是右子树的结点;3、左子树和右子树分别重复步骤1、2;步骤如下:给出先序和后序遍历重建二叉树:这个无法给出正确的树结构,因为先序(根左右)和后序(左右根)遍历的左右孩子遍历的顺序一样,无法区分。如先序遍历结果 1 2 , 后序遍历结果 2 1 ,我们只知道根节点为1原创 2020-05-20 18:12:01 · 1489 阅读 · 0 评论 -
c++ 二叉搜索树的创建 代码解释
二叉搜索树的定义:二叉树中每一个节点:若其左子树存在,则其左子树中每个节点的值都不大于该节点值,若其右子树存在,则其右子树中每个节点的值都不小于该节点值。如果想了解更多二叉搜索树的定义:数据结构(二):二叉搜索树(Binary Search Tree)二叉搜索树主要是用来查找和排序的,查找的时间复杂度o(logn) ~ o(n) ,排序只要中序遍历一遍就可以得到有序的序列。代码:#include<iostream>using namespace std;#define Da原创 2020-05-20 16:57:04 · 1871 阅读 · 1 评论 -
c++ 刷题 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路:先序遍历结果: 1 2 4 7 3 5 6 8中序遍历结果: 4 7 2 1 5 3 8 61、先序遍历的第一个数据就是根节点2、中序遍历根节点左边的就是左子树,右边的就是右子树3、根据第1、2步可得到根节点、左子树、右子树,接下来就是把左子树、原创 2020-05-20 15:03:43 · 1851 阅读 · 1 评论 -
c++ 学习记录 vector容器使用algorithm库的sort() 排序函数
algorithm库的sort() 排序函数的使用方法参考:C++ STL sort 函数的用法1、sort函数包含在头文件为#include的c++标准库中2、sort函数有三个参数:(1)第一个是要排序的数组的起始地址。(2)第二个是结束的地址(最后一位要排序的地址)(3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。vector容器获取首地址:使用 begin()函数vector容器获取结束地址:使用 end()函数原创 2020-05-17 13:33:14 · 771 阅读 · 0 评论 -
c++ 学习记录 构造函数和析构函数
构造函数:格式1、以类名作为函数名2、无返回值类型class Student{public: //构造函数 Student(); //析构函数 ~Student();private:};作用:初始化对象的数据成员(编译器)类的对象被创建时,编译器为对象分配内存空间并自动调用构造函数已完成成员的初始化种类:1、无参构造2、一般构造(重载构造)3、拷贝构造析构函数:1、对象过期时自动调用的特殊成员函数2、析构函数一般用来完成清理工作3、析构函数的名称是在类名前加原创 2020-05-16 16:56:02 · 224 阅读 · 0 评论 -
c++ 学习记录 对象和类
何为面向对象(oop):基于对象,以对象为中心,以类和继承为构造机制,来模拟客观世界1、对象是有数据和容许的操作促成的封装体,与客观实体对应2、面向对象是一种编程思想oop的特性:1、抽象2、封装和数据隐藏3、多态4、继承5、代码的可重用性过程性编程和面向对象编程过程性编程:先考虑遵循的步骤,再考虑如何表示这些数据面向对象编程:不仅考虑数据如何表示,还考虑数据如何使用抽象和类抽象:将问题的本质特征抽象出来,并根据特征来描述解决方案。c++中的类:1、类是一种将抽象转换为用户定原创 2020-05-16 16:33:09 · 99 阅读 · 0 评论 -
c++ 学习记录 const
参考:关于C++ const 的全面总结const 作用:1、可以定义const常量2、便于进行类型检查3、可以保护被修饰的东西4、可以很方便地进行参数的调整和修改5、可以节省空间,避免不必要的内存分配6、 提高了效率const 修饰普通类型的变量代码格式://两种形式无区别//要初始化const int a = 1;int const b = 2;此时变量a的值不可改变const 修饰指针变量1、只有一个const时 如果const位于*左侧,表示指针所致的数据是常量,不原创 2020-05-16 16:11:33 · 122 阅读 · 0 评论 -
c++ 二级指针 学习记录
在创建二叉树时用到了二级指针,现在来研究研究。参考:二级指针的作用详解首先得了解相关的符号:&,&a:取地址符,即把变量a的地址取出来*,*a:访问a保存的地址的内容代码#include<iostream>using namespace std;int main(){ int c = 123; int* b = &c; int** a = &b; return 0;}指针内容:可以看到c的值为:123,地址为:0x006ffc原创 2020-05-12 20:04:35 · 177 阅读 · 0 评论 -
c++ 内联函数、宏定义
参考:1、面试—内联函数和宏定义的区别内联函数:inline声明:在声明函数时头部加inline,在函数定义时头部加inlineinline void test(int , int);////inline void test(int , int){ //}1、内联函数是c++为提高程序运行效率做的改进2、常规函数与内联函数的区别不在于编写方式,而在于被调用时的运行机制3、内联函数和普通函数相比可以加快程序运行的速度,因为不需要中断调用,在编译的时候内联函数可以直接被镶嵌到目标代码原创 2020-05-11 15:54:24 · 151 阅读 · 0 评论 -
c++ 函数定义、函数指针
自定义函数函数三要素:1返回值类型2函数名3参数列表1 函数原型与函数定义头部类似,最后以分号结尾2 函数原型中参数名可以省略,只写参数类型3 c++返回类型不能是数组,但可以是其他任何类型4 数组作为函数实参时只传递数组的首地址,并不传递整个数组空间5 若不想数组在函数中被改变,在函数定义时加const:void Show(const int arr[]);//或void Show(const int* arr);函数指针函数也有地址函数的地址是其机器语言代码的内存的开始原创 2020-05-11 15:22:09 · 239 阅读 · 0 评论 -
C++ 动态内存分配new、delete、内存耗尽情况
参考:C++——动态内存分配new–deletec++ primer plus一、静态内存分配与动态内存分配静态内存分配:全局或局部变量(对象),编译器在编译时都可以根据变量或对象的类型知道所需内存空间的大小。从而系统在适当的时候为他们分配内存空间动态内存分配:有些操作对象只有在程序运行时才能确定,这样编译器在编译时就无法为他们预定存储空间,只能在程序运行时,系统根据运行时的要求进行内存分配称为动态内存分配。动态分配都在自由存储区中进行。动态内存分配 :在c++中可以使用malloc()动态分原创 2020-05-11 14:49:40 · 419 阅读 · 0 评论 -
c++ 二叉树的创建 前中后序遍历 以及遇到的坑
参考:1、数据结构图文解析之:树的简介及二叉排序树C++模板实现.2、C语言创建二叉树过程中遇到的一些问题二叉树的创建:树节点的结构://二叉树的节点的结构struct TreeNode{ char value=0; //结束符'\0' TreeNode* left=NULL; TreeNode* right=NULL;};递归创建二叉树(先序)://传递节点指针的指针!!!重要void CreateTree(TreeNode*& everyTreeNode){原创 2020-05-09 13:38:13 · 676 阅读 · 0 评论 -
c++ 队列 STL库的基本操作
参考:数据结构图文解析之:队列详解与C++模板实现队列简介队列(Queue)特点:1、队列中的数据元素遵循“先进先出”(First In First Out)的原则,简称FIFO结构。2、在队尾添加元素,在队头添加元素。队列的存储结构队列与栈一样是一种线性结构,因此以常见的线性表如数组、链表作为底层的数据结构。队列的基本操作:q.empty() 如果队列为...原创 2020-05-08 10:30:04 · 2156 阅读 · 0 评论 -
c++ 栈 STL的基本操作
参考:https://www.cnblogs.com/QG-whz/p/5170418.html#_label0栈的存储结构栈既然是一种线性结构,就能够以数组或链表(单向链表、双向链表或循环链表)作为底层数据结构。/*堆栈操作和其他序列容器相比,stack 是一类存储机制简单、所提供操作较少的容器。下面是 stack 容器可以提供的一套完整操作:top():返回一个栈顶元素的引用,类型为...原创 2020-05-08 00:33:48 · 2437 阅读 · 0 评论 -
c++ 链表的创建、删除、指定位置插入元素、指定位置删除元素 代码
参考:链表的12种基本操作(C++实现)链表的几个基本操作代码只要弄懂指针、链表的数据结构就不难实现,代码如下,不懂得话可以留言询问,有错误的话请指正#include<iostream>using namespace std;//定义表结点的数据结构:数据+指针struct ListNode{ int value; ListNode* next;};...原创 2020-05-07 14:52:16 · 6863 阅读 · 1 评论 -
c++ 链表的创建 代码及详细解释
参考:C++ 单链表创建、插入和删除c++链表(详解版)c++链表首先我们得明白几个概念:指针 int num = 7; int* p=&num ;//假设地址为0x123456 cout << p << endl; cout << *p << endl;输出:1234567使用时 :*p ...原创 2020-05-06 12:36:32 · 8161 阅读 · 3 评论 -
c++ 指针和引用 简介
学习地址:零基础学C++……指针简介指针是一个值为内存地址的变量(或数据对象)指针保存的是地址声明指针时未初始化则内存地址随机分配使用变量名直接获取数据效率高, 因为指针取值还要查找地址指针基本用法声明:数据类型 * 指针变量名;int num = 10;int* ptr_num;ptr_num = #不允许int * num=0x123456;根据地...原创 2020-05-05 20:31:28 · 153 阅读 · 0 评论 -
c++ sizeof() 的使用方法
参考:c/c++中sizeof()、strlen()、length()、size()详解和区别sizeof():返回所占总空间的字节数(1)对于整型字符型数组(2)对于整型或字符型指针sizeof(…)是运算符,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。由于在编译时计算,因此sizeof不能用来返回动态分配的...原创 2020-05-05 00:00:48 · 1314 阅读 · 0 评论 -
c++ 格式化输出、保留相应小数位数 学习记录
来源:https://www.bilibili.com/video/BV12x411D7xr?p=127在我的vs2019中执行以下代码:#include<iostream>#include<cmath>using namespace std;int main(){ double a = sin(1)*1000; double b = 1.0; cout ...原创 2020-05-01 20:54:08 · 2323 阅读 · 0 评论 -
c++ 字符、字符数组的输入输出,cin、cin.get()、cin.getline()的区别
参考https://blog.youkuaiyun.com/qq_42128241/article/details/81772875?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158822004319195162559290%2522%252C%2522scm%2522%253A%252220140713.130102334.app%255...原创 2020-05-01 00:37:52 · 5105 阅读 · 1 评论 -
c++ 基本数据类型和字符串的一些知识
在C++中的基本 数据类型:类型关键字布尔型bool字符型char整型int浮点型float双浮点型double无类型void宽字符型wchar_t一些基本类型可以使用一个或多个类型修饰符进行修饰:signedunsignedshortLong类型位范围char1 个字节-128 到 ...原创 2020-04-30 20:44:44 · 374 阅读 · 0 评论 -
c++ 输入输出的八、十、十六进制简单转换
八、十、十六进制简单转换今天刷牛客的时候看到一个很有意思的知识点:使用hex可以直接把整型变量输出为十六进制数字,oct输出为八进制,dec输出为十进制不知道是不是我火星了。。。#include<iostream>#include<iomanip>using namespace std;int main(){ int n=15; //cin >&g...原创 2020-04-29 23:52:14 · 418 阅读 · 0 评论