C/C++学习
文章平均质量分 89
魔术师的徒弟
The misery
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++类型转换与STL空间配置器简介
C++的四种类型转换就好像这个简介一样,虽然你让我写(用),但是大部分人不想看(用)原创 2022-07-14 22:38:03 · 650 阅读 · 0 评论 -
利用C++语法进行特殊类设计
C++特殊类设计原创 2022-07-14 22:33:45 · 421 阅读 · 0 评论 -
C++智能指针原理与丐版实现
C++中智能指针的原理与简单实现原创 2022-07-12 21:57:25 · 1090 阅读 · 0 评论 -
C++中的异常
C++中的异常的语法总结原创 2022-07-12 21:54:59 · 778 阅读 · 0 评论 -
C++11中的实用语法
C++11中的常用语法总结原创 2022-07-12 21:51:25 · 1275 阅读 · 0 评论 -
STL(6)—红黑树的简易实现(仅插入功能)与set和map的封装实现
简单模拟实现set和map原创 2022-05-21 10:54:41 · 456 阅读 · 0 评论 -
STL(5)—set和map的使用与AVL树的插入(四种旋转情况)
set和map的常见接口与平衡二叉搜索树AVL树的插入原创 2022-05-16 16:48:15 · 370 阅读 · 0 评论 -
深入了解C++中的多态及其实现原理
多态的原理与实现原创 2022-04-12 17:11:48 · 1254 阅读 · 0 评论 -
深入了解C++中的继承
深入了解C++中的继承原创 2022-04-01 16:33:58 · 997 阅读 · 3 评论 -
C++的IO流简介
C++的IO流简单介绍原创 2022-04-01 16:30:43 · 978 阅读 · 0 评论 -
STL(4)—适配器模式:stack、queue、priority_queue
STL中的适配器:stack、queue、priority_queue原创 2022-03-28 15:14:33 · 1222 阅读 · 0 评论 -
STL(3)——list的使用与模拟实现
STL中list的模拟实现原创 2022-03-23 22:08:18 · 625 阅读 · 0 评论 -
STL(2)——vector的使用与模拟实现
谁说污泥满身的不算英雄。原创 2022-03-15 10:51:47 · 307 阅读 · 0 评论 -
STL(1)—string的使用与模拟实现
string类的使用及其简单模拟实现原创 2022-03-01 18:14:40 · 911 阅读 · 0 评论 -
C++泛型编程—初识模板
模板初阶原创 2022-02-20 16:09:21 · 705 阅读 · 0 评论 -
C++内存管理
C++内存管理原创 2022-02-20 16:05:58 · 1738 阅读 · 0 评论 -
C++基于对象进行编程——类和对象(三)
文章目录一、构造函数再探——初始化列表1 在构造函数体内赋值2 初始化列表的语法3 为什么要有初始化列表?4 explicit关键字二、static成员1 static成员变量2 static成员函数三、C++11成员初始化的补丁四、友元函数1 友元函数2 友元类五、内部类六、封装和面向对象的思想的一个小例子一、构造函数再探——初始化列表1 在构造函数体内赋值 我们以前写构造函数用的方法其实都算是在构造函数体内赋值,意思是说我们在成员函数内的时候,对内置类型来说,这些变量已经在地址空间上被写好了随机原创 2022-01-19 21:04:41 · 876 阅读 · 0 评论 -
C++基于对象编程—类和对象(二)
类的6个默认成员函数、构造函数、析构函数、拷贝构造函数、运算符重载简介、赋值运算符重载、坑、const成员函数、取地址运算符``&``和``const``取地址运算符``&``重载原创 2022-01-17 21:08:46 · 1130 阅读 · 0 评论 -
C++基于对象进行编程——类和对象简介(一)
什么是面向对象 什么是面向过程、引入类(对struct的升级)、类的定义、类的访问限定符与封装、类的作用域、对象实例化、类对象模型、this指针原创 2022-01-15 20:01:25 · 951 阅读 · 1 评论 -
C++基础语法总结
C++基础语法总结:命名空间、C++的输入流和输出流、缺省参数、函数重载、extern "C"、引用、内联函数原创 2022-01-14 20:50:20 · 3057 阅读 · 0 评论 -
异或为什么满足结合律,布尔代数与布尔环简介
之前在学习C语言中的按位运算时,有做到一道leetcode题目: 这个题的核心思路就是利用异或的性质://异或的定义对二进制位0 1来说,如果说0代表假1代表真,那么对于两个二进制位a和b来说a异或b的意思就是要么a为真b为假 要么a为假b为真满足这两种情况时a异或b为真,否则a异或b为假所以1 ^ 1 = 0;1 ^ 0 = 1;0 ^ 1 = 1;0 ^ 0 = 0;对于两个相同长度的位序列x和y来说x ^ y 的结果就是把x和y的每一个二进制位进行上面的运算//异原创 2021-11-24 18:21:35 · 2699 阅读 · 1 评论 -
《EssentialC++》笔记4—以Template进行编程
本文唯一重点:使用VS2019写C++,在写模版类中用到了模板参数的成员函数时,该成员函数不能放到.cpp文件里,也就是说头文件不能与cpp文件分离。这就意味着,你头文件定义的含模版的地方必须在头文件中实现,没用模版定义的地方可以放在cpp中实现。文章目录6.1 被参数化的类型6.2 Class Template的定义6.3 Template类型的处理6.4 实现Class Template6.5 以一个模板函数完成输出运算符6.6 常量表达式做template参数和默认参数值6.7 以Template原创 2021-11-18 17:50:54 · 896 阅读 · 0 评论 -
《EssentialC++》笔记3—面向对象的编程风格
本文主要用于笔者复习使用,因此很多地方写的比较简略,还请见谅。 本文讨论的继承都是public继承。文章目录5.1 面向对象编程概念5.2 定义抽象基类5.3 定义派生类5.5 运用继承体系5.6 另一种抽象基类设计理念5.7 在派生类中定义虚函数5.8 运行时的鉴定机制5.1 面向对象编程概念 面向对象编程的第一个概念是继承:派生类会继承父类的public和protected成员,每个派生类也可以选择覆盖或者增加继承而来的东西,个virtual关键字可以让成员函数变成虚函数,可以让被修饰原创 2021-11-15 18:59:55 · 997 阅读 · 6 评论 -
《EssentialC++》笔记2—基于对象的编程风格
本文主要用于笔者复习参考,很多地方写的比较粗略,还请见谅。 一般而言,class由两部分组成:一组公开(public)的操作函数和运算符,以及一组私有的(private)实现细节。这些操作函数和运算符称为class的member function(成员函数),并代表这个class的公开接口。身为class的用户,只能访问其公开接口。这也就是我们使用string和vector的方式。 Class的private实现细节可由member function的定义以及与此class相关的任何数据组成。原创 2021-11-14 23:36:24 · 1138 阅读 · 0 评论 -
《EssentialC++》笔记1—泛型编程风格
本文主要供笔者复习使用,所以很多地方写的很简略,还请见谅。 STL主要由两种组件构成,一是容器,包括vector、list、set、map等类. 另一组组件是用以操作这些容器的所谓泛型算法 包括find() sort() replace() merge()等. vector和list是所谓的顺序容器 我们主要在顺序容器上进行所谓的迭代操作. map和set是关联容器。关联容器可以让我们快速查找到容器中的元素值 map是一组key/value组合,key是关键字,用于查找, 所谓原创 2021-11-14 23:08:08 · 1187 阅读 · 0 评论 -
VS2019创建和使用静态库(.lib文件)
我把我的静态双向链表和图都制作成了静态库放到了我的Gitee上,如果需要使用调库可以来我的Gitee下载。魔术师的徒弟的的Gitee一、静态库的创建 首先,创建一个空项目: 把头文件和实现接口的.c(或.cpp)文件都粘过来。然后点属性。常规那栏,把.exe换成.lib 然后生成解决方案 这个.lib文件就是我们创建的静态库。二、使用静态库 创建一个新的空项目,然后把本来的.lib文件和.h文件都粘贴过去。 在项目中把这些.h文件都添加上 在你要用的原创 2021-10-27 19:30:14 · 5244 阅读 · 0 评论 -
图文并茂的讲解C语言中函数栈帧的创建与销毁
文章目录1.寄存器2.代码演示I、为main函数创建栈帧步骤1 epb压栈步骤2 epb移动到main的栈底步骤3 把esp移上去,创建main函数的空间步骤4 ebx esi edi三次压栈步骤5 把这块空间都填成ccII int a=10;III int b=30;IV int c=0;V c=ADD(a,b);传参:步骤1 eax存b的值步骤2 eax压栈步骤3 ecx存a的值 ecx压栈调用ADD函数步骤1: call指令的下一条指令的地址压栈步骤2 进入ADD函数为ADD函数创建栈帧步骤1 ep原创 2021-10-06 16:16:32 · 1017 阅读 · 0 评论 -
C语言实现扫雷(如果周围没有雷,自动展开周围区域)
文章目录game.hgame.ctest.c 我们选择两个字符二维数组,第一个二维数组用来表示雷的状态,’1‘表示此位置有雷,’0‘表示此位置没有雷;另一个二维数组负责展示扫雷情况,每个位置上的数代表它周围8个格子中雷的个数,最初这个二位数组全用*填满。 要模拟的和网页版扫雷功能类似,难点在于如果扫到的位置不是雷且周围雷的个数是0,自动扫周围的格子,然后同理往下递归。 所以实现这个功能我们自然而然想到递归,发现展开的值是0时自动展开周围的8个格子,但是这里的痛点在于它可能会造成反复展开通一格子的原创 2021-10-06 00:31:18 · 871 阅读 · 1 评论 -
C语言实现井字棋
我们设计一个二维数组去储存当前的棋盘状态,然后利用Displayboard函数来打印起来,这里打印的要点是打印一行数据行,打印一行分割行,如果到了最后一行,就不打印分割行,打印数据行时,一次打印一个 " %c “,如果不是最后一个元素,就再打印一个”|",打印分割行时,一次打印一个"—“如果不是最后一个元素,就再打印一个"|"。 我们游戏的逻辑是初始化棋盘,打印棋盘,人下棋,打印棋盘,判断是否游戏结束,电脑下棋,打印棋盘,判断是否游戏结束,然后回到人下棋过程,结束游戏后,根据iswin函数的返回值来原创 2021-10-05 18:22:27 · 456 阅读 · 0 评论 -
辗转相除法求解最大公约数和最小公倍数的数学原理
文章目录0. 符号规定1.辗转相除法证明2.(a,b)[a,b]=ab证明0. 符号规定gcd(a,b)————————————a和b的最大公约数gcd(a,b)————————————a和b的最大公约数gcd(a,b)————————————a和b的最大公约数amodb————————————a除b的余数a mod b————————————a除b的余数amodb————————————a除b的余数(a,b)————————————a和b的最大公约数(a,b)————————————a和原创 2021-10-05 01:38:24 · 911 阅读 · 0 评论 -
青蛙跳台阶—递归思想的实现
本文目录原问题变种1变种2原问题 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 思路:既然青蛙一次可以跳上1个1级台阶或者一次跳上1个2级台阶,那么跳上一个n级台阶的方法:要么是先跳上一个n-1级台阶然后再跳一个1级台阶做到;要么是跳上一个n-2级台阶然后再跳上一个2级台阶实现;所以跳上n级台阶的方法数等于跳上n-1级台阶的方法数加上跳上n-2级台阶的方法数,用f(n)表示跳上n级台阶的方法数,经过我们的分原创 2021-10-04 20:13:49 · 588 阅读 · 0 评论 -
一次性搞懂KMP算法,解决你对k=next[k]的回溯疑惑
一次性搞懂KMP算法原创 2021-10-02 21:44:37 · 2285 阅读 · 12 评论 -
C语言的字符串函数与内存函数的功能与模拟实现
字符串与内存函数1.1 strlen 字符串长度size_t strlen(const char* str); 有的编译器用int接受strlen的返回值会报错,因为size_t是无符号整形。size_t sz=strlen(arr);printf("%u",arr);str指向的字符串必须包含’\0’,否则无法计算字符串长度。-strlen函数返回无符号整形的问题:int main(){ if(strlen("abc")-strlen("abcedf")>0)原创 2021-10-01 22:45:17 · 227 阅读 · 0 评论 -
C语言中浮点数和整形数据的储存与读取
深度剖析数据在内存中的存储1.数据类型介绍C语言的基本的内置类型有char //字符数据类型short //短整型int //整形long //长整型long long //更长的整形float //单精度浮点数double //双精度浮点数C语言标准规定了一些库函数 规定函数名 参数类型 返回值类型 函数功能但没有规定这些库函数怎么实现。库函数的具体实现是编译器的厂商提供的 VS g.原创 2021-09-29 21:51:03 · 2693 阅读 · 0 评论 -
程序环境和预处理
程序环境和预处理.c 源文件/源代码 是一个文本形式的代码。.exe 可执行文件 是一个二进制的文件。一、程序的翻译环境和执行环境1.1 什么是翻译环境和执行环境在ANSI C(C标准)的任何一种实现中,存在两个不同的环境。第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。第2种是执行环境,它用于实际执行代码。1.2 我们的源文件执行的过程.c文件运行的过程:编译-链接-运行:前两个过程是翻译环境,运行是执行环境。编译可以分为三个过程:预编译 编译 汇编1.原创 2021-09-28 17:37:13 · 214 阅读 · 0 评论 -
C语言的文件操作与通讯录写入文件
文件操作一、为什么使用文件 以我们写的通讯录为例,关闭了程序后再打开这个程序内容就不见了。因为我们的数据放在内存里,结束操作就还给操作系统了,为了改进这些事情,我们可以把这些数据放到硬盘里。 通讯录里数据,能不能也放在文件中,存储的磁盘上,做到持久化的效果。 我们只要把信息写在文件中就可以了。二、什么是文件 在程序设计中,我们一般把文件分为程序文件和数据文件。2.1 程序文件包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境 后原创 2021-09-27 18:01:45 · 2505 阅读 · 0 评论 -
C语言的动态内存管理
动态内存管理1.为什么存在动态内存管理?因为通过普通创建变量的方式开辟空间,空间太死板了,空间开辟过大会造成浪费,空间开辟过小会导致溢出,固定的内存大小好像总是不够灵活。C语言给了我们一种方法,可以根据我们的需求开辟空间,给我们C语言使用者更多的灵活性。2.动态内存函数的介绍我们可以把可以我们可以调用的内存区分为三种区域栈区:用来存放局部变量、函数形式参数(会被销毁的一些量);堆区:用来动态内存分配(堆区上空间的维护) ,使用堆区上的空间需要malloc calloc realloc fre.原创 2021-09-23 17:04:47 · 215 阅读 · 0 评论 -
C语言自定义结构类型与电话通讯录的实现
优快云的小伙伴们中秋节快乐呀! 整理了一下今天所学与大家分享,就当是中秋节礼物啦。一、结构体struct Node{ int data; Struct Node n;}//这样定义的缺陷在于每个node里头都有个node,不断地递归至无限的大,无法确定需要的内存空间大小。struct Node{ int data; struct Node* next;}//指针的大小就是四个字节或者八个字节,避免了上面无法确定内存空间大小的问题。//结构体自引用:这个结原创 2021-09-21 21:26:54 · 1197 阅读 · 0 评论 -
Start Here
Hi,优快云的朋友们好,我是幻术师的徒弟,一名编程语言爱好者,目前在学习C/C++和初等的数据结构。 每周我都会拿出一些空闲时间来丰富我的编程知识,并且写一些博客向大家深入浅出的讲解我遇到的有趣知识,如果文章中有什么疑惑处可以随时私信讨论,如果文章有错误也希望大家帮我指正,非常希望能与大家多多交流。...原创 2021-09-20 19:32:26 · 130 阅读 · 0 评论 -
C程序结构
第十二章 程序结构一、全局变量I、定义 在函数外面的变量叫全局变量。II、特点全局变量具有全局的生存期和作用域。它们与任何函数都无关。在任何函数内都可以使用它们。#include <stdio.h>int ball=2;int f(void);int main(){ printf("in %s ball =%d\n",__func__,ball); f();//__func__返回函数的名字 printf("again in ..原创 2021-09-19 22:03:49 · 391 阅读 · 0 评论
分享