![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++面试准备
嘤嘤嘤
嚣张的叉烧包
一个还没入门SLAM的小菜鸡。
展开
-
C++/C文件读取
ofstream:写操作ifstream: 读操作fstream : 读写操作打开方式解释ios::in为读文件而打开文件ios::out为写文件而打开文件ios::ate初始位置:文件尾ios::app追加方式写文件ios::trunc如果文件存在先删除,再创建ios::binary二进制方式1、写文件包含头文件#include <fstream>创建流对象ofstream ofs;打开文件o.原创 2021-04-26 23:02:21 · 188 阅读 · 0 评论 -
C++类class
定义构造函数:在定义一个类对象时会自动调用,可用于实现一些功能,比如new一个内存。构造函数,没有返回值也不写void函数名称与类名相同构造函数可以有参数,因此可以发生重载程序在调用对象时候会自动调用构造,无须手动调用,而且只会调用一次 析构函数:在类对象销毁时执行,可用于实现一些功能,比如delete一个内存。析构函数,没有返回值也不写void函数名称与类名相同,在名称前加上符号 ~析构函数不可以有参数,因此不可以发生重载程序在对象销毁前会自动调用析构,无须手动调用,而且只会原创 2021-04-22 09:55:13 · 4902 阅读 · 0 评论 -
C++函数重载
函数中的参数默认值在C++中,函数的形参列表中的形参是可以有默认值的。语法:返回值类型 函数名 (参数= 默认值){}#include <iostream>using namespace std;// 函数的参数有默认值,放在右边,且那么从这个位置往后,从左向右,必须都要有默认值// 即b有默认值,那么c也必须有默认值void test1(int a, int b = 10,int c = 20){ cout << a + b + c << endl;原创 2021-04-05 10:38:33 · 51 阅读 · 0 评论 -
C++二维数组名与数组指针的思考
二维数组名和数组指针可以当做一个东西用,但两者之间的含义是不同的。二维数组名是一个指向数组中所有元素的指针,而数组指针是一个行指针。体现在sizeof()上的不同。#include <iostream>using namespace std;int main(){ // a是一个二维数组名,指向一个二维数组 int a[2][3] = {{1,2,3},{4,5,6}}; // a所占的内存为24,即6*4 cout<<sizeof(a)&l原创 2021-04-03 10:43:25 · 210 阅读 · 4 评论 -
C++ new
C++中利用new操作符在堆区开辟数据堆区开辟的数据,由程序员手动开辟,手动释放,释放利用操作符 delete 语法:new 数据类型利用new创建的数据,会返回该数据对应的类型的指针开辟单个内存语法:new 数据类型(初始值)#include <iostream>using namespace std;int* get_num(){ int* a = new int(10); return a;}int main(){ int* res = g原创 2021-04-02 11:40:36 · 351 阅读 · 0 评论 -
C++结构体
结构体定义和使用语法:struct 结构体名 { 结构体成员列表 };通过结构体创建变量的方式有三种:struct 结构体名 变量名struct 结构体名 变量名 = { 成员1值 , 成员2值…}定义结构体时顺便创建变量#include <iostream>#include <string>using namespace std;struct student{ string name; int age;}stu3;// 方式3:定义了一个原创 2021-04-01 12:23:36 · 66 阅读 · 0 评论 -
C++数组名做函数形参/指针
数组名做函数形参数组未开辟空间时#include <iostream>using namespace std;void test(int* a){ *a = 0; *(a+1) = 1; *(a+2) = 2; cout<<a[0]<<a[1]<<a[2]<<endl; return;}int main(int argc,char* argv[]){ int* a; test(原创 2021-03-31 12:51:31 · 187 阅读 · 0 评论 -
C++数组
一维数组一维数组定义方式#include <iostream>using namespace std;int main(int argc,char* argv[]){ // 1 int a1[10] = {1,2,3,4,5,6,7,8,9,10}; // 2 int a2[] = {1,2,3,4,5,6,7,8,9,10}; return 0;}数组名的使用1、 获取数组的长度#include <iostream>原创 2021-03-30 12:41:31 · 73 阅读 · 0 评论 -
C++标识符命名规则/int的取值范围/for的组成/break、continue
标识符命名规则1、标识符不能是关键字2、标识符只能由下划线、字母、数字组成3、数字不能作为标识符的开头4、标识符中区分大小写 int取值范围int由4个字节组成,共32位,其取值范围为:正数:00000000 00000000 00000000 00000000 ~ 01111111 11111111 11111111 11111111,即0 ~ 2^31-1负数:10000000 00000000 00000000 00000000 ~ 10000000 00000000 0000000原创 2021-03-29 11:16:30 · 851 阅读 · 0 评论 -
C++继承
继承的主要作用:减少代码的数量class A : public B;其中A称为子类/派生类,B称为父类/基类派生类中的成员,包含两大部分:一类是从基类继承过来的,一类是自己增加的成员。继承方式类中变量的分类继承方式分为:公有继承、保护继承、私有继承类中的变量分为:public\protected\private#include <iostream>using namespace std;class Base1{public: int m_A = 1;原创 2021-03-18 15:38:35 · 68 阅读 · 0 评论 -
C++ 计算二叉树的深度
二叉树的深度可通过BFS,DFS计算获得。#include <iostream>#include <queue>using namespace std;class TreeNode{public: TreeNode* left; TreeNode* right; int val; TreeNode(int value):val(value),left(NULL),right(NULL){}};// BFS实现二叉树的深度计算int原创 2021-03-18 12:05:13 · 2062 阅读 · 0 评论 -
C++二叉搜索树
二叉搜索树(Binary Search Tree,又称BST)。任意一个节点的左子树的值一定小于根节点的值,右子树的值一定大于根节点的值。二叉搜索树的中序变量递增!以Leetcode第98题为例:给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入: 2 / \ 1 3输出: tr原创 2021-03-16 15:44:09 · 151 阅读 · 0 评论 -
C++智能指针
诶嘿嘿原创 2021-03-15 16:55:34 · 79 阅读 · 0 评论 -
C++ memset
memset的主要功能是对一片内存进行赋值(逐字节进行)包含在头文件#include < cstring >中。函数模板void *memset(void *s, int v, size_t n); s:数组名,或指向某一片内存的指针名,v:要填充的值,n:填充的个数,一般使用sizeof(s)。实例要注意memset是逐字节进行赋值的,比如Int的话,占有4个字节(一个字节8位),每个字节都会被赋值为1,此时变为00000001 00000001 00000001 000原创 2021-03-14 16:59:33 · 612 阅读 · 0 评论 -
C++左值/右值
简单的结论:左值:在内存中占有地址。右值:在内存中没占用地址。简单的例子#include <iostream>#include <vector>#include <algorithm>using namespace std;int main(){ // value就是一个左值,10就是一个右值 int value = 10; // value + 10是一个右值 value + 10 = 10; // 10是一个右原创 2021-03-13 17:14:37 · 532 阅读 · 1 评论 -
C++ 回调函数
函数指针函数指针是一种指针,具体来说是:指向函数入口地址的指针。#include <iostream>using namespace std;double function_t(int val){ return val;}int main(){ double (*ptr)(int); // 创建一个函数指针,返回值为double类型,参数为int类型 ptr = function_t; // 函数指针ptr指向function_t函数原创 2021-03-12 15:50:31 · 87 阅读 · 0 评论 -
C++ static
(1)static表示静态变量。局部变量存储在栈区,在{}结束时被释放。而static修饰的变量存储在全局区,在程序结束时被释放。(2)static修饰的变量在外部文件中无法调用,即使使用extern也无法调用。其它文件中可以定义相同名字的变量,不会发生冲突。(3)未经初始化的静态全局变量会被程序自动初始化为0。(4)静态变量在第一次声明时进行初始化,后面不会再次进行初始化。static作用于函数中的局部变量#include <iostream>#include "orb_extra原创 2021-03-11 17:15:53 · 251 阅读 · 0 评论 -
C++const关键字作用
修饰普通变量,表示不可修改#include <iostream>using namespace std;const int a1 = 10;int main(){ const int a2 = 10; a1 = 10; // 错误,不可修改变量的值 int b1 = a1; // 可以给其余变量赋值}修饰指针const修饰指针时分3种情况:常量指针、指针常量、常指针常量。常量指针#include <iostream>using n原创 2021-03-09 19:51:35 · 71 阅读 · 0 评论 -
C++负数、小数如何保存
负整数正整数直接按照源码存储,负整数按照补码存储。原码、反码、补码首先要清楚原码、反码、补码:计算机中一个字节为8位,在此以一个字节为例:原码:十进制1:0000 0001十进制-1:1000 0001(负数的符号位为1)反码:十进制1:0000 00001十进制-1:1111 1110(除符号位外,其余反转)补码:十进制1:0000 00001十进制-1:1111 1111(负数的补码为负数的反码+1)因此,正数的原码、反码、补码相同,负数的原码、反码、补码各不相同。 反原创 2021-03-08 16:58:40 · 1230 阅读 · 0 评论 -
C++程序编译过程
程序编译的过程,是将源代码转换为计算机可执行的机械语言的过程。分为预处理、编译、汇编、链接四步。(1)预处理:对程序进行预处理,比如将头文件的代码直接赋值到当前代码中等等.(2)编译:将源程序转为汇编语言。(3)汇编:将汇编语言转为机器语言。(4)链接:将机械语言与标准库链接在一起。...原创 2021-03-06 17:23:15 · 89 阅读 · 0 评论 -
C++内存的分区
C++内存分为四个区:(1)代码区:存放代码转译成的二进制代码。(2)全局区:存放全局变量、静态变量(static)、常量(如字符串常量)。 全局区中还包含一个常量区,用于存储常量(字符串、const)(3)栈区:存放局部变量、函数的参数等。(4)堆区:程序员自己开辟(new)、释放(delete)。 C++编译通过后生成exe可执行文件,在文件运行前,只有两个区:(1)代码区:存放 CPU 执行的机器指令。代码区共享且只读。(2)全局区:存放全局变量,静态变量、常量。#include原创 2021-03-05 22:08:54 · 391 阅读 · 0 评论 -
C++指针与引用的区别
(1)指针是一个变量,本身占有内存,内存中存储的是所指向对象的地址。引用是内存的别名。(2)指针可以通过解引用的方式,取出所指向内存中的值。引用没有解引用。(3)指针可以先定义,然后在后面初始化。引用在定义的时候必须初始化。(4)++运算符对于指针、引用的作用不同。指针是个变量,里面存放的是所指向的内存的地址。而引用是一个变量的别名,只是给一个内存取了一个别名而已。#include <iostream>using namespace std;int main(int argc,c原创 2021-03-04 14:43:55 · 113 阅读 · 1 评论