C++
Am最温柔
每天都有觉得自己太菜的焦虑,解决方法也很简单,好好学习就行了,今天也要加油鸭~
展开
-
二叉树的后序遍历
需要注意的点:后序遍历与中序遍历的区别是,当访问某个节点是,可以确定其左孩子已经被访问过了,但是右孩子是否被访问过了还无法确定,因此需要使用一个prev变量,记录一下前一个被访问过的节点,如果右孩子是这个已经被访问过的节点,或者右孩子为空时,此时才能访问当前节点。(访问过该节点的含义是,将该节点放入了res数组,对于后序遍历,其必要条件是,该节点的左孩子和右孩子都被访问过了)/** * Definition for a binary tree node. * struct TreeNode { *原创 2022-04-17 19:23:17 · 1041 阅读 · 0 评论 -
N叉树的前序遍历和后序遍历
N叉树的前序遍历和后序遍历代码非常相似,只需要修改将val放入res数组的位置即可。需要注意的两点:多叉树遍历需要使用一个map来记录,已经遍历到了第几个孩子节点。1.这个map记录的是,哪个节点已经访问到第几个子节点了。unordered_map也可以用地址作为key。2.多叉树遍历的过程中,pop操作是在当前节点的所有子节点访问结束之后才可以pop。class Solution {public: vector<int> postorder(Node* root) {原创 2022-04-17 19:16:56 · 1077 阅读 · 0 评论 -
explicit关键字C++
目录何时使用explicit?explicit关键字的作用是什么?对象的两种初始化方式explicit关键字的作用之前一直比较费解explicit的作用,现在记录一下自己目前的理解。何时使用explicit?当构造函数只有一个参数时,才需要使用。explicit关键字的作用是什么?先举个例子:当构造函数有explicit修饰时:不能够使用:编译时会报错:而当构造函数中不写explicit关键字时,就不会编译报错,并且程序能够正常执行。就不贴图了。总结一下explicit关键字作用原创 2021-08-21 23:14:43 · 307 阅读 · 0 评论 -
学习使用C++——make_shared函数
学习使用C++——make_shared函数make_shared也是在内存中分配空间,构造一个对象,也会调用构造函数。优点: 提高性能,异常安全(暂时没看懂,目前就知道怎么用)我的错误认知的纠正:1.我竟然写出 shared_ptr<A> objA1 = new A(1,2); 这样的语句,等号左右的类型不匹配,等号左边是一个模板类,等号右边是一个指针,显然不能进行这样的初始化语句。2. shared_ptr<A> objA3 = shared_pt原创 2021-08-18 23:02:46 · 6181 阅读 · 0 评论 -
自己实现一个字符串C++
需要注意的点:自己实现一个String类,需要注意的点:拷贝构造函数和赋值运算符重载要写深拷贝拷贝构造函数和赋值运算符重载的区别是,拷贝构造需要申请空间,但是赋值运算符重载不需要,它需要释放原有的空间,并考虑自赋值赋值运算符重载返回值是引用。构造函数,如果使用空指针构造,则申请一个字节加\0析构函数要释放空间函数的默认参数写在声明中,不用写在定义中(?)判断自赋值:使用对象的地址——this进行判断,而不能使用*this#include<iostream>#include&l原创 2021-08-18 21:10:35 · 211 阅读 · 0 评论 -
C++构造函数的四种传参方式
今天看到书上对对象直接用=赋值调用构造函数,十分不解,浴室百度了一下发现有四种方式可以对构造函数传参,觉得这几种方式只是是写C++语言的人规定的四种形式,都可以编译使用。// classes and uniform initialization#include <iostream>using namespace std; class Circle { double radius; public: Circle(double r) { radius = r; }原创 2021-05-15 14:37:22 · 4601 阅读 · 0 评论 -
C++编译报错:does not name a type
在一个源文件中,要声明或定义一个类的指针时,必须在使用前声明或定义该类,因此下面的代码会报错:class A{public: B *b;};class B{public: A *a;};int main(){ return 0;}报错为“error: ‘B’ does not name a type”,就是因为在A类中使用B *b之前没有声明或定义B类,如果在第一行加上一句前置声明(forward declaration)“class B;”,就不会有这样的原创 2021-02-18 12:55:28 · 47776 阅读 · 1 评论 -
剑指 Offer 32 - III. 从上到下打印二叉树 III
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。解题思路:1.层序遍历,外层循环遍历每一层,内层循环遍历每一个节点2.使用队列,队列不空则执行循环体,先将队列首部元素的值写入数组,然后将队列的左右节点入队,弹出队列首部节点需要注意的点:vector使用push_back而q使用push/** * Definition for a binary tree node. * struct Tre原创 2021-02-04 22:42:01 · 101 阅读 · 0 评论 -
剑指 Offer 40. 最小的k个数
剑指 Offer 40. 最小的k个数输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。解题思路:利用快排的partition函数,只要保证第k-1个的元素已经放到正确位置,则从第0个到k-1个元素就一定是最小的k个元素。在定位到第k-1个元素的过程中,还仿佛使用了二分查找的思想。错误记录:1.返回空数组可以这么写:return vector();2.返回数组的前k个元素的方式:return vector<原创 2021-01-25 21:48:22 · 107 阅读 · 0 评论 -
static修饰的变量是不是仅限于本文件使用的问题C++
static修饰的变量是不是仅限于本文件使用的问题:加了static确实限制了其作用域为本文件,在不include的情况下,即使Extern之后也不能使用(编译不过)例子如下:a.cpp文件如下:#include<iostream>using namespace std;int a = 123;b.cpp文件如下:#include<iostream>using namespace std;extern int a;int main(){ cout&原创 2021-01-22 15:38:14 · 1437 阅读 · 0 评论 -
C++学习记录(散装笔记无体系)
一、关于构造函数的若干废话(太长了估计我自己都不会看第二遍,更不要说别人了)1.构造函数(1)构造函数是一类特殊的成员函数,他们没有返回值,函数名称与类名相同。构造函数是可以重载的,即可以写多个构造函数,他们的参数表不同。(2)C++规定,任何对象生成时都一定会调用构造函数进行初始化。这句话说得很肯定很硬气有木有!同时,对象一旦生成就再也不会在其上执行构造函数。(3)如果程序员没有编写...原创 2020-05-05 14:59:15 · 117 阅读 · 0 评论