- 博客(44)
- 收藏
- 关注
原创 [C++] C++类和对象 类的初始化列表和静态成员 类型转换/友元/内部类/匿名对象/编译器优化
对于成员变量,最后都会去初始化列表处初始化例如,你在成员变量声明时给上缺省值,实际上编译器是在初始化列表处用你给的缺省值去进行初始化语法:
2024-10-19 21:28:56
1086
原创 [ C++ ] C++ 类和对象 -- 类的六个默认成员函数
在C++中当你创建一个空类,那这个空类是什么都没有吗?不是的,编译器会默认帮你生成六个成员函数。
2024-10-09 20:41:31
1083
原创 C++笔记 --基本语法(命名空间/函数重载/缺省参数/引用/inline/nulltpr)
在C语言中,常常会出现命名冲突的问题,当你展开头文件时,发现别人写的函数或变量名和自己定义的一样,那么就需要通过条件编译解决,但是很麻烦而C++就通过 关键字namespace来解决命名冲突的问题。可以使用namespace来定义一个命名空间域,将自己的代码放入命名空间域中,而编译器编译时是默认只会查找全局和局部域的,所以就避免了命名冲突的问题。
2024-09-27 15:03:53
711
原创 八大排序——万字长文带你剖析八大排序(C语言)
每趟排序的过程是向数组下表0位置去走的,而每趟排序的开始位置是一直往数组尾部去变的,比如我开始比较下表1和下表0的位置,下表1的元素比下表0小,那你就向后挪,我再跟前面的比,前面的是-1所以这趟排序就走完了。这时候[0,1]位置就是已经排好序的区间,下一次来排序就是在一个有序的区间内去进行插入。
2024-09-24 21:39:34
870
原创 二叉树的遍历和算法题
如果是完全二叉树,那么这时候队列的所有结点都应该是NULL,当有不为NULL的结点就说明树不为完全二叉树。4.若规定二叉树的根节点的层数为1, 具有n个结点的二叉树,其高度h为log(n+1)利用队列先进先出的特性,队头pop的时候将队头的左右子树push进队列,上面带下面。首先创建一个队列,队列存放二叉树结点的指针,然后将二叉树的根结点push进队列。1.若规定二叉树的根结点的层数为1,那么二叉树的第i层有2^(i-1)棵结点。2.若规定二叉树的根结点的层数为1,那么一颗二叉树最多有2^(h)-1。
2024-09-20 14:53:52
1291
原创 堆的向下调整算法和TOPK问题
首先堆是一种完全二叉树,它一定满足所有的根结点都大于或小于它的左右子树如果是大堆,那么堆顶的数就是堆中最大的数如果是小堆,那么堆顶的数就是堆中最小的数堆常常用来解决排序和TOPK问题对于完全二叉树而已,若将结点从根结点开始,从0开始编号,那么父节点 = (i-1)/2 (i-1)/2>=0左孩子结点=(i*2)+1 (i*2)+1<n右孩子结点=(i*2)+2 (i*2)+2<n。
2024-09-20 14:34:59
863
原创 队列的实现(C语言)
但是队列要可以访问队头和队尾 函数需要传两个指针参数 所以单独设计一个结构体存储这两个结点指针front和rear。2.不为空则说明只需要改变rear即可 申请新节点链接到链表中 改变rear。结构说明:使用单链表作为基础的数据结构 链表结点存储数据和下一个结点地址。1.为空则说明front和rear都要置为newNode。1.只有一个结点 将front和rear都置为NULL。2.多个结点 只将front指向它的下一个结点即可。判断队列为不为空 为空则返回 不为空分两种情况。
2024-09-13 15:30:06
592
原创 栈和队列的算法题目(C语言)
利用栈后入先出的特性解题1.判断字符串是否为空 为空返回2.创建栈,遍历字符串第一个字符是左括号的情况:入栈->继续遍历下一个字符第一个字符是右括号的情况:从栈顶取元素,判断当前右括号是否匹配栈顶的左括号3.遍历结束,判断栈是否为空,为空说明所有括号都已匹配,不为空说明有左括号没有匹配上。
2024-09-13 15:06:28
1079
原创 栈的实现(C语言)
top这里设计的是指向栈顶元素的下一个元素,top也就是栈内有效元素的个数。而数组因为下表,最后一个元素的在数组中的位置需要-1。栈后入先出的特性,跟数组尾部的插入删除是O(1)很适合,所以用一个动态增长的数组来实现栈。创建结构体类型StackNode。
2024-09-13 14:42:51
352
原创 十道经典的链表OJ题目
3.遍历链表 保留前结点 当前结点为val时 则前结点的next等于当前结点的next 删除当前结点。fast走两步 slow走一步 fast走完链表的时候 slow刚好就是链表的中间结点。再将小于x的元素的链表的当前结点指针指向 存放大于x的元素的链表的哨兵位的下一个结点。prev的值应为当前结点的前一个结点 即prev的值应随着cur的改变而改变。创建两个哨兵位结点 分别存放小于x的元素结点和大于等于x的结点。将大于x的元素的链表的当前结点指针置为NULL 防止链表带环。
2024-09-12 12:02:24
1233
原创 单链表的实现(C语言)
链表是一种链式结构,物理结构不连续,逻辑结构是连续的,在计算机中链表的实际存储是按照一个结点内存放下一个结点的地址来实现链接的。
2024-09-11 20:55:45
581
2
原创 万字长文带你初步理解计算机网络
首先,说到网络你的第一印象是什么?站在普通人角度肯定就是我可以通过网络做各种事情,刷抖音看B站打王者还有今天在这里你看到的优快云的文章。但是今天我们要理解的网络,是要站在一个!
2023-03-19 19:10:48
857
2
原创 C++笔记 模板的进阶知识
一个程序(项目) 由若干个源文件共同实现,通过编译形成目标文件,最后将目标文件链接形成单一的可执行文件,执行的过程就叫做分离编译。1.模板复用了代码,增加了开发效率,C++的模板库(STL)也因此而诞生2.增强了代码的灵活性1.模板会导致代码膨胀的问题,编译时间变长2.模板编译错误时,错误信息非常凌乱,不易定位错误t=N176。
2023-02-19 17:35:38
638
1
原创 Linux笔记 Linux中的进程
因为OS会为每个进程都创建一个各自独立的task_struct和进程地址空间mm_struct,在子进程不进行对变量写时,父子进程看到的g_val的值和地址都相同,两个虚拟地址映射的物理内存也一样,但一旦父子进程对其修改,就会发生写时拷贝,尽管地址还相同,但实际经过页表的重新映射,父子进程实际存放g_val的物理内存已经不同了。程序内部的地址,依旧用的是编译器编好的虚拟地址。前面说的"程序的地址空间"是不准确的,当我们写的程序被运行在操作系统后会变成一个个的进程,所以准确的说应该是。
2022-09-28 20:20:00
2498
8
原创 C++笔记 - - list的模拟实现和使用
首先看一下文档当中是怎么说的1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。3. list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。
2022-09-25 14:17:49
554
1
原创 C++笔记 - - STL vector容器的使用和模拟实现
【代码】C++笔记 - - STL vector容器的使用和模拟实现。无参的构造函数 :vector();构造并初始化n个value : vector(size_type n,const value_type& val =value_type()); //value_type实际就是模板的参数T拷贝构造函数 : vector(const vector& x);迭代器区间进行构造:vector(Inputlterator first,Inputlteratorl last);
2022-09-18 07:08:45
376
5
原创 Linux笔记 - - yum/git/gdb的使用
yum在Linux当中就像是我们手机当中的应用市场,可以进行软件的yum源就是一个配置文件,内置了下载链接。这些链接指向了一些软件发布平台,我们就是在通过软件发布平台去安装软件的。
2022-09-16 20:21:42
1365
原创 Linux笔记 - - gcc/g++和make/Makefile的使用
make是一条命令,Makefile是一个文件,二者搭配使用,完成项目的自动化构建依赖关系和依赖方法使用vim打开Makefile文件,写入代码myfile是目标文件,依赖与file.o文件,它们构成依赖关系file.o文件依赖于file.sfile.s文件依赖与file.ifile.i文件依赖与file.cpp原理make是如何工作的,在默认的方式下,也就是我们只输入make命令。那么,1. make会在当前目录下找名字叫或的文件。2.如果找到,它会找文件中的第一个目标文件(
2022-09-16 13:13:10
1091
原创 Linux笔记 - - vim的使用
1.认识vimvim是一款在Linux平台下的,只负责编写代码。打开Linux,在命令行输入 vim test.c 进入vim。注意:如果没有test.c文件vim会帮你新建一个test.c的文件进入到vim之后可以发现,是不能立即写上代码的,这是为什么呢???引出概念 -> vim的模式,在进入vim时,其实是进入到了vim的某种模式当中在进入vim之后,其实就是进入了正常模式,在正常模式下,你想立即写代码是不行滴在命令模式中按 i 进入插入模式。
2022-09-15 19:55:43
1253
原创 C++ string类模拟实现
1.创建string类2.默认成员函数的模拟实现2.1 Constructor(构造函数)函数实现:2.2 Destructor(析构函数)函数实现:2.3 拷贝构造函数函数实现:2.4 Operator=(赋值运算符的重载)函数实现:测试代码:3.Capacity(容量)函数实现:测试代码:4.Element access(元素访问)测试代码:5.Iterators(迭代器)函数实现:测试代码:6.Madifiers(修
2022-09-09 22:19:21
1254
3
原创 C++ string类
1.为什么要学习使用string类1.1 C语言中的字符串1.2 相比与C库函数方便、快捷、简单2.标准库中的string类2.1 string类的了解2.2 string的常用接口说明string类对象的常见构造
2022-09-07 18:38:45
518
6
原创 C++模板的原理和使用
1.泛型编程2.函数模板2.1函数模板概念2.2 函数模板格式2.3 函数模板的原理2.4 函数模板的实例化2.5 函数模板的匹配规则3.类模板3.1 格式3.2 类模板的实例化
2022-09-04 20:00:09
2257
1
原创 C/C++内存管理(C/C++内存分布、malloc/calloc/realloc、new/delete实现原理)
1.C/C++内存分布2.C语言中内存管理的方式:malloc/calloc/realloc/free3.C++内存管理方式3.1 new和delete操作内置类型3.2 new和delete操作自定义类型4.operator new和operator delete函数5.new和delete的实现原理5.1 内置类型5.2 自定义类型
2022-09-03 18:50:43
382
原创 C++类和对象(初始化列表、explicit关键字、static成员、友元、内部类)
1.再谈构造函数1.2初始化列表2.static成员2.1概念3.友元3.1 友元函数3.2 友元类4. 内部类
2022-09-03 14:39:37
540
2
原创 C++类和对象(类的默认成员函数)
1.类的六个默认成员函数2.构造函数2.1 概念2.2 构造函数的特性3.析构函数3.1 概念3.2 特性4.拷贝构造函数4.1 概念4.2 特征5.赋值运算符重载5.1运算符重载5.2 赋值运算符重载7.取地址重载和const成员取地址重载
2022-09-03 12:48:18
562
2
原创 C++类与对象(一)
1. 面向过程和面向对象初步认识2.类的引入3.类的定义3.1类的两种定义方法4.类的访问限定符和封装4.1 访问限定符4.2 封装5类的作用域6.类的实例化7.类对象模型7.1 如何计算类对象的大小7.2 类对象的存储方式猜测7.3 结构体内存对齐规则8.this指针8.1 this 指针的引入8.2 this指针特性几个小问题1.C++中struct和class的区别是什么?2.结构体如何对齐?..........
2022-08-31 08:33:31
227
原创 初步了解C++
定义命名空间,需要使用namespace,后面跟空间名,最后加上一对{},括号里面的就是命名空间里的成员三个特点1.正常定义命名空间定义的命名空间可以定义函数/变量/类型。{//在命名空间中可以定义变量/类型/函数{}inta=0;{intval;}}2.命名空间可以嵌套定义{//在命名空间中可以定义变量/类型/函数{}inta=0;{intval;}//命名空间可以嵌套定义{intval;}}{重点。......
2022-07-19 01:33:14
468
原创 数据结构--------树\二叉树\完全二叉树\堆
在数据结构中,有线性的数据结构。比如耳熟能详的数组、链表等都是线性的数据结构。那有没有不是线性的呢?当然有,本文要介绍的就是数据结构中一种非线性的数据结构 ---树1. 树的概念及其结构 1.1 树的概念树是一种非线性的数据结构 ,它由n(n>=0)个有限节点组成一个有层次关系的集合。把它叫做树是因为它很想一颗倒挂的树,也就是说树的根朝上,而叶子朝下的。有一个特殊的节点,称为根节点,根节点没有前...
2022-05-29 20:23:52
885
8
原创 数据结构:“栈“住,“队列“
目录1.栈是啥1.1栈的概念和结构1.2 栈的实现2.队列2.1 队列的概念和结构2.2 队列的实现1.栈是啥栈是一种数据结构(废话)。。1.1栈的概念和结构栈是一种特殊的线性表,跟链表顺序表这类数据结构最大的区别就是-----栈只能在固定的一端进行数据的增删,增加的那端是栈顶,另一端是栈底。栈遵循后进先出LIFO(Lase In First Out)的原则。压栈 数据的插入操作叫做 压栈\入栈\进栈,入数据在栈顶 出栈 数据的删除操.
2022-05-17 18:45:11
256
5
原创 数据结构线性表——顺序表、链表
1.线性表线性表(linear list)是有n个相同特性的元素组成的有限序列,在逻辑上是线性结构,也就是连续的一条直线;但是在物理结构上,不一定是连续的。常见的线性表有:顺序表、链表、栈、队列、字符串....2.顺序表顺序表是用一段物理地址连续的存储单元依次存储数据元素的数据结构,一般采用数组存储,在数组上完成增删查改。顺序表一般分为:1.静态的顺序表:使用定长数组存储元素。define N 6typedef int SeqListDataType;t.
2022-05-14 16:15:13
732
4
原创 算法的时间复杂度和空间复杂度
目录1.算法效率1.1 衡量算法的好坏1.2 算法的复杂度2.时间复杂度2.1时间复杂度的概念2.2 大O的渐进表达法3.空间复杂度4.常见的复杂度对比1.算法效率1.1 衡量算法的好坏怎样才能衡量一个算法的好坏呢?对于下面的斐波那契数列long long Fib(int N){ if(N < 3) return 1; return Fib(N-1) + Fib(N-2);}斐波那契数列递归实现的代码非常简洁..
2022-05-14 13:43:02
244
原创 C数据结构之链表简单OJ题目-1
想做好数据结构题目先画图理清一下思路,先想好,再去具体实现。不然写了错,错了改,还会出现写了一百多行最后发现找不到错误,最后含泪重开......wuu我就是这样,不写难受一天,写了更难受了。leetcode.206.反转链表https://leetcode-cn.com/problems/reverse-linked-list/这题可以用双指针解决:设置两个指针end1,end2.end1指向前一个,end2指向后一个,两个指针分别表示局部紧邻的链表结点end1初始就..
2022-05-05 17:17:27
188
原创 C语言-预处理指令
1.预定义符号__FILE__ //当前文件的文件名__LINE__ //文件当前的符号__DATE__ //文件被编译的日期__TIME__ //文件被编译的时间__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义这些预定义的符号都是语言内置的举个栗子:printf("line:%d date:%s\n",__LINE__,__DATE__);可以发现我们没有定义这些符号,但它们可以
2022-04-14 14:31:07
2717
3
原创 C语言----程序环境
目录1.程序的翻译环境 和 执行环境2.详解 编译 or 链接2.1 翻译环境2.2 编译2.3 运行环境1.程序的翻译环境 和 执行环境在ANSI C的任何一种实现中,存在两种不同的环境第一种是编译环境,在这个环境中源代码被转换成可执行的机器指令第二种是执行环境,它用于实际执行代码2.详解 编译 or 链接2.1 翻译环境画张图简单了解下程序编译过程# 组成一个程序的每一个源文件通过编译过程分别转换成...
2022-04-08 12:53:37
1052
3
原创 C语言动态内存管理
1.为什么存在动态内存管理?一般开辟内存空间的时候,像开辟数组、变量时开辟的都是固定的空间 //常见的开辟内存的方式 int a = 0; //向内存申请四个字节的空间,在栈上申请 int arr[10]={0}; //向内存申请连续的十个int类型的空间,在栈上申请像上述的方式有两个特点: 1.空间开辟大小是固定的。 2.数组在声明时必须指定大小,它所需要的空间在编译时分配。这些开辟内存的方式是在编译...
2022-03-31 16:35:06
1457
3
原创 C增删查改通讯录(静态版本)
Contact.c#include"Contact.h"//初始化通讯录void InitContact(Contact* Con){ assert(Con != NULL); Con->sz = 0; memset(Con, 0, sizeof(Con));}//增加联系人void AddContact(Contact* Con){ if (Con->sz >= ContactMax) { printf("通讯录满了,无法添加联系人\n");
2022-03-31 06:53:19
551
原创 C语言结构体、枚举、联合体
#1.结构体在现实世界里,常常有一些复杂对象不好用简单的变量或数组去表示,这时候C语言的自定义类型:结构体,就可以帮我们很好的定义这些复杂对象。1.1 结构体是什么:结构体是一些值的集合,这些值被称为成员变量,成员变量可以是不同的类型。1.2结构体的声明:这个时候我们就声明了一个有两个char类型和一个int类型的结构体类型struct str1.3结构体的不完全声明:与上面的声明不同的是少了结构体标签,所以这个结构体类型只有一个变量s3,不可在函...
2022-03-26 03:01:48
837
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人