- 博客(34)
- 收藏
- 关注
原创 C++_智能指针详解
什么是智能指针?为什么要有智能指针?到目前为止,我们编写的程序所使用的对象都有着严格定义的生命周期。比如说,全局对象在程序启动时分配,在程序结束时销毁;再比如说局部static对象在第一次使用前分配,在程序结束时销毁......除了这些对象,C++还支持动态分配对象。动态分配的对象的生命周期与它们在哪里创建无关,。如果不显式地释放,则很有可能造成内存泄漏!!而动态对象的正确释放是编程中最容易出错的地方,所以C++引入了智能指针的概念,来帮助我们编程人员更好的释放。
2024-10-04 20:51:25 1056
原创 C++11_lambda
在C++98中,如果想要对一个数据集合中的元素进行排序,可以使用std::sort方法。比如说,我想在某宝买一件商品,我想买该商品价格最便宜的哪一个,这就需要对价格排升序;我如果想买性价比最高的,就需要按照综合进行排降序...但随着C++语法的发展,有人开始觉得上面的写法太复杂了,每次为了实现一个algorithm算法,都要重新去写一个类(),如果每次比较的逻辑不一样,还要去实现多个类,特别是相同类的命名,这些都给编程者带来了极大的不便。因此,在C++11语法中引入了lambda表达式。
2024-10-03 09:43:26 870
原创 C++11_左值引用与右值引用
在C++11之前,是没有右值引用的概念的,在C++11之后才新增了右值引用。其实无论是左值引用还是右值引用都是给对象取别名。
2024-10-01 17:24:47 786 2
原创 C++_unordered系列关联式容器(哈希)
unordered系列关联式容器,我们曾在一文中浅浅的提了几句。今天我们来详细谈谈本身在C++11之前是没有unordered系列关联式容器的,unordered系列与普通的map、set的核心功能重叠度达到了90%,他们最大的不同就是底层结构的不同,map和set的底层使用的是红黑树;unordered底层是用的hash结构,两者在使用上基本上没有什么不同,map和set使用方法那一套在unordered系列容器同样试用,这里不再赘述。本篇文章主要讨论一些哈希相关知识。
2024-09-28 17:02:26 836
原创 红黑树详解
红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。
2024-09-26 19:52:52 982
原创 C++_map_set详解
set是按照一定次序存储元素的容器在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格的排序准则(默认是小于)进行排序。set在底层是用二叉搜索树(红黑树)实现的。map是关联容器,它按照特定的次序(按照key来比较)存储由键值key和值value组合而成的元素。
2024-09-16 17:46:36 1106
原创 深度解析C++重载、隐藏、重写
从定义上看隐藏包含着重写,即重写是一种特殊的隐藏,只要两个基类和派生类的同名函数不构成重写,那么它就是隐藏;而重载与 隐藏和重写 最大的区别就是两个函数是不是在同一个作用域。
2024-07-10 11:34:54 203
原创 C++_STL---vector
构造函数声明接口说明代码演示vector()无参构造构造并初始化n个val//初始化为5个值为10的整数拷贝构造使用迭代器进行初始化构造。
2024-06-28 18:02:24 778
原创 C++_STL---string类
说起string类,首先需要了解的是 - string类是什么?std::string是类模板std::basic_string的一个元素类型为char的实例化,而basic_string则是对元素指针的封装。由于basic_string的实现对字符串操作进行了优化,所以它不能用来表示除char以外的对象串。但是使用string类也避免了和'\0'的纠缠不休,也就是说,string并不关心它所代表的字符串有无'\0'作为字符串的结束标志,相反'\0'是它的一个合法元素。
2024-06-25 20:43:49 1080 1
原创 C++构造&析构函数
一般情况下构造函数都需要我们自己显示的去实现只有少数情况下可以让编译器自动生成构造函数1. 有资源需要显示清理,就需要写析构函数,如:Stack。2. 有两种场景不需要显示写析构函数,默认生成就可以。a.没有资源需要清理,如:Date。b.内置类型成员没有资源需要清理,如:MyQueue。
2024-04-11 17:10:55 682
原创 C语言_文件操作
int main()//打开文件return;i < 26;i++) //写文件{ //往data.txt文件里面,写入26个英文字母fclose(pf);//关闭文件pf = NULL;return 0;int main()//打开文件return;i < 5;i++) //读文件{//读取data.txt文件中的前五个字符fclose(pf);//关闭文件pf = NULL;return 0;
2024-04-09 16:44:00 754
原创 深度解析C语言——预处理详解
什么是预定义符号:预定义符号是由编译器预先设置好的特殊标识符,它们代表了特定的信息,如编译器版本、目标平台信息、编译选项等。在C语言中, 也设置了一些预定符号,可以直接使用。//常见的C语言预定义符号__FILE__ //进⾏编译的源⽂件__LINE__ //⽂件当前的⾏号__DATE__ //⽂件被编译的⽇期__TIME__ //⽂件被编译的时间int main()//输出结果:file:C:\Users\test.c line:269。
2024-04-02 21:34:47 2075 1
原创 C++函数重载&引用
自然语言中,一个词可以有多重含义,人们可以通过上下文来判断该词真实的含义,即该词被重载了。比如:以前有一个笑话,国有两个体育项目大家根本不用看,也不用担心。一个是乒乓球,一个是男足。前者是“谁也赢不了!”,后者是“谁也赢不了!
2024-04-01 16:18:21 885
原创 C语言编译与链接
在美国国家标准学会(AMERICAN NATIONAL STANDARDS INSTITUTE: ANSI)C的任何一种实现中,存在两个不同的环境: 那么翻译环境是怎么将源代码转换为可执行的机器指令的呢?这⾥我们就得展开开讲解⼀下翻译环境所做的事情。 其实翻译环境是由编译和链接两个大的过程组成的,而编译又可以分解成:预处理(预编译)、编译、汇编三个过程。⼀个C语言的项目中可能有多个 .c 文件一起构建,那多个 .c 文件如何生成可执行程序呢? 如果再把上图中的编译器展开,那
2024-03-30 21:59:36 2118
原创 C++入门——基础语法(一)
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。// 命名空间中可以定义变量/函数/类型int data;命名空间也可以嵌套int a;int b;//命名空间的嵌套int c;int d;同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中总结:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中。
2024-03-29 18:41:44 473 1
原创 归并排序&计数排序
计数排序在数据范围集中时,效率很高,但是适用范围及场景有限。只能排序整数时间复杂度:O(MAX(N,range))空间复杂度:O(range)稳定性:稳定。
2024-03-26 09:55:43 479 1
原创 简单排序——冒泡、选择排序
无论你学习那种编程语言,在学到循环和数组时,通常都会介绍一种排序算法来作为例子,而这个算法一般就是冒泡排序。并不是它的名字多好听,而是说这个算法思路最简单,最容易理解。
2024-03-23 16:57:32 670
原创 深度解析排序算法——希尔(插入)排序
希尔排序是D.L.Shell于1959年提出来的一种排序算法,在这之前排序算法的时间复杂度基本上都是O(N^2)的,希尔排序算法是突破这个时间复杂度的第一批算法之一。
2024-03-22 16:55:53 821 1
原创 深度解析排序算法——快速排序
快速排序算法最早是由图灵奖获得者Tony Hoare设计出来的,该算法被列为20世纪十大算法之一,也是我们必须要掌握的算法之一。任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。快排的代码实现目前快排的代码实现分为两种方式:一种是递归实现、一种是非递归实现。而递归实现有三种实现思想,希望大家能够理解。注意:下面车速较快,请系好安全带。
2024-03-07 09:35:02 811 1
原创 浅谈函数栈帧的创建与销毁
官方定义:只允许在一端进行插入或删除操作的线性表。栈常被定义为一种特殊的容器,用户可以将数据压入栈中(压栈,push),也可以将已经压入栈中的数据弹出(出栈,pop),但是栈这个容器必须遵守一条规则:先进后出栈的使用是从高地址到低地址好了,函数栈帧的创建与销毁的全部代码到这里就结束了。现在让我来回答一下文章开头的几个问题。1.局部变量是怎么创建的?答:在函数栈帧创建好之后,在函数栈帧的有效空间内,由编译器为局部变量分配空间并初始化2.为什么局部变量不进行初始化会是随机值?
2024-02-18 21:16:13 932 1
原创 深度解析C语言函数strcpy、strncpy、memcpy
官方定义:第一个参数:目的地址,要把拷贝的内容放到哪里去第二个参数:源头地址,要从哪里拷贝数据。(const表示该指针指向的内容不期望被修改)该函数的返回类型是返回目的空间的起始地址(char*)。需要包含头文件:<string.h至于三种函数的相同点,这里就不再多说,大家按需求选择使用函数。最后如果用不理解的地方,欢迎私信骚扰~~886~~
2024-02-08 11:19:51 2183
原创 深度解析C语言内存函数
大家都知道C语言中包含许多库函数,如strlen,strcmp,strcpy等等。但是除了这些函数,C语言还为我们提供了一些内存函数,本文会详细介绍几种内存操作函数:memcpy函数、memmove函数、memset函数、memcmp函数,希望大家通过学习这几种函数,会对内存和指针有更深刻的了解。官网给出的函数定义:该函数包含三个参数:dest - 目的地址,void *就是可以指向任何类型的指针(因为不确定所拷贝的地址是什么类型)src - 源头地址,源头地址的内容是不期望被修改的,所以加上const修饰
2024-02-07 08:00:00 942 1
原创 整数和浮点数在内存中的存储模式
说起整数和浮点数,大家一定不会陌生。什么是整数和浮点数呢?就是。就是。那么整数和浮点数在内存中又是怎样存储的呢?存储方式是否相同呢?想知道后续如何,请接着往下看~
2024-01-25 19:27:34 1004
原创 C与指针全家桶
通俗点说,指针就是地址。举个例子:今天张三在XX酒店,开了一个房间,然后张三打电话给自己的好朋友李四说,明天你来XX酒店305房间来找我,我在305房间等着你。这个“XX酒店305房间”其实就是指针,“李四”就是一个指针变量,他里面放着张三的地址其实“张三打电话给自己的好朋友李四”int* pa = &a;“李四去酒店找张三(通过张三给的地址找到张三)”*pa = 2024;数组是一个存放相同类型数据的存储空间,前面我们已经学习了指针数组。//数组的每个元素是int*
2024-01-16 18:30:36 834 1
原创 深度解析C语言sizeof()与strlen()
sizeof是C语言的操作符,sizeof计算变量所占内存空间的大小,单位是字节。如果操作数是类型,则计算的是使用类型创建的变量所占内存空间的大小只需要记住一点:sizeof只关注内存空间的大小,不在乎内存中存放了什么类型的数据。
2024-01-15 21:31:30 383
原创 深度解析C语言printf()函数与scanf()函数
formatargument...printf()函数 的是将参数⽂本输出到屏幕。其中的f代表format (格式化),表示可以定制输出⽂本的格式。要想使用printf()函数,必须在源码文件头部引入头文件stdio.h。printf() 不会在行尾自动添加换行符,运行结束后,光标就停留在输出结束的地方,不会自动换行。例:为了让光标移到下一行的开头,可以在输出⽂本的结尾,添加⼀个换行符 \n。
2024-01-06 13:24:14 841 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人