![](https://img-blog.csdnimg.cn/20190927151117521.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C/C++
文章平均质量分 67
C/C++相关学习内容
Fighting_1997
唯有勤奋不会辜负于你。
展开
-
C++ ACM模板输入
基于多列表操作操作可以进行相应的修改。原创 2023-03-07 11:33:51 · 383 阅读 · 0 评论 -
GCC编译器
c++原创 2022-12-24 16:45:16 · 123 阅读 · 0 评论 -
十大经典排序算法的理解、动图演示和Python、C、C++语言方法实现
1. 排序算法概述排序:将一组“无序”的记录序列调整为“有序”的记录序列排序算法平均时间复杂度最好情况最坏情况空间复杂度稳定性冒泡排序O(n2)O(n^2)O(n2)O(n)O(n)O(n)O(n2)O(n^2)O(n2)O(1)O(1)O(1)稳定选择排序O(n2)O(n^2)O(n2)O(n2)O(n^2)O(n2)O(n2)O(n^2)O(n2)O(1)O(1)O(1)不稳定插入排序O(n2)O(n^2)O(n2)O(n)O(n)O原创 2021-05-16 17:03:34 · 388 阅读 · 1 评论 -
面向过程和面向对象程序设计优缺点总结
项目名称面向对象程序设计面向过程程序设计(也叫结构化编程)定义面向对象顾名思义就是把现实中的事务都抽象成为程序设计中的“对象”,其基本思想是一切皆对象,是一种“自下而上”的设计语言,先设计组件,再完成拼装。面向过程是“自上而下”的设计语言,先定好框架,再增砖添瓦。通俗点,就是先定好main()函数,然后再逐步实现mian()函数中所要用到的其他方法。特点封装、继承、多态算法+数据结构优势适用于大型复杂系统,方便复用适用于简单系统,容易理解劣势比较抽象、性...原创 2022-03-04 17:41:04 · 1086 阅读 · 0 评论 -
校招面经呕心总结(C++/Linux)
1. 引用和指针的区别?(内存空间分配)指针是一个实体,需要分配内存空间,而引用只是变量的别名,不需要分配内存空间。(初始化和指向空间)引用定义时必须要初始化,并且不能改变指向空间大小,而指针定义时不需要初始化,可以改变指向空间,因此,不存在指向空值的引用,但存在指向空值的指针。(多级)存在多级指针,但不存在多级引用,只有一级引用(自增)指针自增和引用自增不同,指针自增指向下一个空间地址,而引用自增是使所对应的实参变量进行+1。(sizeof)sizeof引用计算的是实参对象本身的大小,而siz原创 2022-02-16 20:51:08 · 1024 阅读 · 0 评论 -
C++求vector容器中的最大值(最小值)及其位置
方法:min_element和max_element输入参数为vector迭代器,输出为单一元素迭代器#include <iostream>#include <vector>#include <algorithm>using namespace std;int main(){ vector<int> a = { 2,4,6,7,1,0,8,9,6,3,2 }; auto maxPosition = max_element(a.b原创 2022-02-15 15:38:25 · 28639 阅读 · 3 评论 -
数据结构之二分法查找(左右边界,详细整理)
二分法作为数据结构的基础知识,经常作为使用,特意作为一次总结强调:二分法有两种形式,主要差异在于right的限制,本博客主要以其中一种方式展开,这种方式便于记忆和理解二分法查找pythondef binarySearch(nums: List[int], target[int]) -> int: left = 0, right = len(nums)-1 while left <= right: mid = left + (right - left) // 2 if nums原创 2022-02-14 11:15:16 · 2203 阅读 · 0 评论 -
编译型语言和解释型语言的区别
1. 编译型语言的工作原理属于编译型语言的有:C、C++、Delphi等,其中选取C语言为代表来说明。首先,C编程的基本策略是,用程序把源代码文件转换为可执行文件。典型的C实现通过编译和链接两个步骤来完成这一过程:1. 程序员使用文本编辑器创建源代码文件2. 编译器把源代码翻译成中间代码(机器语言),并把结果放在目标代码文件中3. 链接器把中间代码和系统的标准启动代码、库函数代码合并成可执行文件,并交由CPU去执行*科普:1. 启动代码,充当着程序和操作系统之间的接口,不同操作系统对应不同原创 2022-01-27 11:04:45 · 661 阅读 · 0 评论 -
C++之Lambda表达式
1. 概述C++ 11 中的 Lambda 表达式用于定义并创建匿名的函数对象,以简化编程工作。Lambda 的语法形式如下:[函数对象参数] (操作符重载函数参数) mutable 或 exception 声明 -> 返回值类型 {函数体}可以看到,Lambda 主要分为五个部分:[函数对象参数]、(操作符重载函数参数)、mutable 或 exception 声明、-> 返回值类型、{函数体}.2. Lambda 语法分析2.1 [函数对象参数]标识一个 Lambda 表达式原创 2022-01-11 14:03:17 · 269 阅读 · 0 评论 -
C++ 栈和堆的区别
转载:https://www.cnblogs.com/lxmhhy/p/3559212.html C++中的存储区分为全局数据区、代码区、堆、栈。全局数据区存放静态数据、全局变量、常量。代码区存放所有类成员函数和非成员函数的代码。栈区存放用于函数的返回地址、形参、局部变量、返回类型。堆区存放余下的内存(new和delete)。堆和栈的区别:1、申请方式不同:栈是系统自动分配,堆是程序员申请。2、系统响应不同:栈:只要栈的剩余空间大于所申请的空间,系统就会为程序提供内存,否则栈溢出。.原创 2022-01-06 00:11:44 · 2906 阅读 · 0 评论 -
C++强制类型转换
C++强制类型转换隐式转换(C语言经常使用!)显示转换(C++使用)@@C++显示转换static_cast、dynamic_cast、reinterpret_cast、const_cast强制类型转换是有一定风险的,有的转换并不一定安全,如把整型数值转换成指针,把基类指针转换成派生类指针,把一种函数指针转换成另一种函数 指针,把常量指针转换成非常量指针等。C语言强制类型转换缺点:主要是为了C语言强制类型转换的以下三个缺点:没有从形式上体现转换功能和风险的不同例如,将int强制转原创 2021-12-21 21:20:37 · 1533 阅读 · 0 评论 -
C++ 重载、重写(覆盖)、隐藏各自要求与异同总结
1. 重载(overload)重载从overload翻译过来,是指在同一作用域中,同名函数的形式参数(参数个数、类型或者顺序)不同时,构成函数重载,重载不关心函数返回类型。1. 相同的范围(在同一个作用域中)2. 函数名字相同3. 参数不同列表4. virtual 关键字可有可无5. 返回类型可以不同2. 重写/覆盖(override)重写定义为:派生类中与基类同返回值类型、同名和同参数的虚函数重定义,构成虚函数覆盖,也叫虚函数重写。重写的基类中被重写的函数必须有virtual修饰。如果原创 2021-12-19 23:51:05 · 812 阅读 · 0 评论 -
C++ map自定义排序
STL中使用映射(map)时,常常希望能够根据自己的需要进行排序,排序的方法进行如下整理:一、对key值进行特定的排序map容器里面有两个值一个key一个是value,map<key,value>,其实map里面还有第三个参数,是一个类,用来对map的key进行排序的类,定义如下template<class _Kty, class _Ty, class _Pr = less<_Kty>, class _Alloc = allocator<pa原创 2021-12-19 19:02:12 · 4572 阅读 · 0 评论 -
二叉树中有关回溯问题讨论
目的最近在刷leetcode二叉树时,发现回溯算法在二叉树中还是比较常见的,也遇到了一些问题,目前是有一个较为清晰的认识,当然可能也存在错误,总结下来,以便日后查看!!问题以两个两叉树题目为主展开二叉树的所有路径简单的说,就是将二叉树的所有路径输出。代码呈现:class Solution {public: void dfs(TreeNode* node, string path, vector<string>& result){ if (node原创 2021-12-19 10:27:04 · 549 阅读 · 0 评论 -
C++引用
引用 作用:给变量起别名 语法:数据类型& 别名 = 原名示例int a = 10;int& b = a;注意事项:引用必须初始化引用在初始化后,不可以改变示例int a = 10; int b = 20; //int &c; //错误,引用必须初始化 int &c = a; //一旦初始化后,就不可以更改 c = b; //这是赋值操作,不是更改引用引用做函数参数 作用:函数传参时,可以利用引用的技术让形参修饰实参 优点:可以简化原创 2021-12-12 18:36:43 · 62 阅读 · 0 评论 -
C++内存分配详解
C++内存分配C++程序在执行时,将内存大致分为4个区域:代码区:存放函数体的二进制代码,由操作系统进行管理全局区:存放全局变量、静态变量以及常量,生命周期是程序整个运行过程中栈区:由编译器自动分配和释放,存放函数的参数值、局部变量等堆区:由程序员手动分配和释放,若程序员不释放,程序结束时由操作系统回收四区意义:不同的区域存放不同的数据,赋予不同的生命周期,给程序员更大的操作空间1 程序运行前在程序编译后,生成了.exe可执行文件,未执行该程序前分为两个区域代码区: 存放CPU执原创 2021-12-12 17:59:05 · 1902 阅读 · 0 评论 -
C++ 内置函数 判断字母、数字及大小写转换、字符串转换
C++ 内置函数 判断字母、数字及大小写转换c++的几个内置函数方法含义islower(char c) :是否为小写字母isupper(char c):是否为大写字母isdigit(char c) :是否为数字isalpha(char c) :是否为字母isalnum(char c):是否为字母或者数字toupper(char c):字母小转大tolower(char c) :字母大转小to_string(int i):int原创 2021-12-10 14:11:27 · 890 阅读 · 0 评论 -
Static与Const的区别
Static与Const的区别staticstatic 局部变量将一个变量声明为函数的局部变量,那么这个局部变量在函数执行完成之后不会被释放,而是继续保留在内存中static 全局变量表示一个变量在当前文件的全局内可访问static 函数表示一个函数只能在当前文件中被访问static 类成员变量表示这个成员为全类所共有static 类成员函数表示这个函数为全类所共有,而且只能访问静态成员变量constconst 常量:定义时就初始化,以后不能更改。const 形参:func(原创 2021-12-09 16:51:16 · 205 阅读 · 0 评论 -
静态方法和非静态方法的区别
静态方法:是使用static关键字修饰的方法,又叫类方法.属于类的,不属于对象,在实例化对象之前就可以通过“类名.方法名”调用静态方法。非静态方法:是不含有static关键字修饰的普通方法,又称为实例方法,成员方法。属于对象的,不属于类的。1、调用方法不同静态方法可以直接调用,类名调用和对象调用。(类名.方法名 / 对象名.方法名)但是非静态方法只能通过对象调用。(对象名.方法名)2、生命周期不同静态方法的生命周期跟相应的类一样长,静态方法和静态变量会随着类的定义而被分配和装载入内存中。原创 2021-12-09 14:24:30 · 1429 阅读 · 0 评论 -
Leetcode学习之单调栈
单调栈学习内容每日温度思路下一个更大元素I思路下一个更大元素II思路接雨水思路双指针法动态规划单调栈处理逻辑每日温度题目链接请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是 [1, 3原创 2021-12-06 21:59:32 · 737 阅读 · 0 评论 -
Leetcode学习之动态规划
文章目录1. 动态规划理论基础什么是动态规划动态规划的解题步骤动态规划应该如何debug2. 斐波那契数思路动规五部曲:3. 爬楼梯思路4. 使用最小关系爬楼梯思路5. 不同路径思路6. 不同路径II思路7.8.9.10.11.12.13.14.15.16.17.18.19.20.1. 动态规划理论基础动态规划刷题大纲什么是动态规划动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导原创 2021-11-24 11:59:00 · 587 阅读 · 0 评论 -
STL源码刨析
1. STL概述STL起源:为的就是复用性的提升,减少人力资源的浪费,建立了数据结构与算法的一套标准。STL所实现的、是依据泛型思维架设起来的一个概念结构。这个以抽象概念〔 abstract concepts)为主体而非以实际类(classes)为主体的结构,形成了一个严谨的接口标准。在此接口之下,任何组件都有最大的独立性,并以所谓迭代器〈 iterator)胶合起来,或以所谓配接器(adapter)互相配接,或以所谓仿函数( functor)动态选择某种策略( policy或strategy) 。原创 2021-11-22 13:36:43 · 7570 阅读 · 1 评论 -
Leetcode学习之贪心算法
贪心算法理论基础题目分类大纲如下:什么是贪心贪心的本质是选择每一阶段的局部最优,从而达到全局最优。这么说有点抽象,来举一个例子:例如,有一堆钞票,你可以拿走十张,如果想达到最大的金额,你要怎么拿?指定每次拿最大的,最终结果就是拿走最大数额的钱。每次拿最大的就是局部最优,最后拿走最大数额的钱就是推出全局最优。再举一个例子如果是 有一堆盒子,你有一个背包体积为n,如何把背包尽可能装满,如果还每次选最大的盒子,就不行了。这时候就需要动态规划。动态规划的问题在下一个系列会详细讲解。贪心的套路(什原创 2021-11-22 13:22:13 · 1450 阅读 · 0 评论 -
C++ STL map容器详解
map/multimap1. map基本概念用于存储和检索集合中的数据,此集合中的每个元素均为包含数据值和排序键的元素对。 键的值是唯一的,用于自动排序数据。可以直接更改映射中的元素值。 键值是常量,不能更改。 必须先删除与旧元素关联的键值,才能为新元素插入新键值。map和multimap区别:map不允许容器中有重复的元素multimap允许容器中有重复的元素2. 语法template <class Key, class Type, class Traits = le原创 2021-11-18 00:27:02 · 205 阅读 · 0 评论 -
C++三大特性
C++ 三大特性。(1)继承让某种类型对象获得另一个类型对象的属性和方法。它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展常见的继承有三种方式:实现继承:指使用基类的属性和方法而无需额外编码的能力。接口继承:指仅使用属性和方法的名称、但是子类必须提供实现的能力。可视继承:指子窗体(类)使用基窗体(类)的外观和实现代码的能力。例如,将人定义为一个抽象类,拥有姓名、性别、年龄等公共属性,吃饭、睡觉等公共方法,在定义一个具体的人时,就可以继承这个抽象类,既保留了公共属原创 2021-11-15 14:46:18 · 599 阅读 · 0 评论 -
Leetcode学习之回溯算法
1. 回溯算法理论基础什么是回溯法回溯法也可以叫做回溯搜索法,它是一种搜索的方式。在二叉树系列中,我们已经不止一次,提到了回溯,例如二叉树:以为使用了递归,其实还隐藏着回溯。回溯是递归的副产品,只要有递归就会有回溯。所以回溯函数也就是递归函数,指的都是一个函数。回溯法的效率回溯法的性能如何呢,必须强调的是,虽然回溯法很难,很不好理解,但是回溯法并不是什么高效的算法。**因为回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案,**如果想让回溯法高效一些,可以加一些剪枝的操作,但也改不了回原创 2021-11-14 14:31:15 · 4471 阅读 · 0 评论 -
二叉树学习之内容总结
1. 二叉树:递归函数究竟什么时候需要返回值,什么时候不要返回值?一般情况下:如果需要搜索整颗二叉树,那么递归函数就不要返回值,如果要搜索其中一条符合条件的路径,递归函数就需要返回值,因为遇到符合条件的路径了就要及时返回。其实还有一种就是后序遍历需要根据左右递归的返回值推出中间节点的状态,这种需要有返回值。另外,如果我们重建二叉树(比如删除等)root->left = traversal(root->left....)这种类型的时候,也会带有返回值,但是返回值不会中断迭代。2.递归函数什原创 2021-11-13 10:50:27 · 312 阅读 · 0 评论 -
顺序表和链表对比
原创 2021-11-02 15:38:02 · 87 阅读 · 0 评论 -
C++ STL Set容器详解
Set容器set/ multiset 容器1 set基本概念简介:所有元素都会在插入时自动被排序本质:set/multiset属于关联式容器,底层结构是用二叉树实现。set和multiset区别:set不允许容器中有重复的元素multiset允许容器中有重复的元素2 运算符Set 版本Multiset 版本描述operator! = (set)operator! = (multiset)测试运算符左侧的 set 或 multiset 对象是否不等于原创 2021-11-01 23:44:49 · 773 阅读 · 0 评论 -
C++ STL Queue容器详解
queue 容器1 queue 基本概念概念:Queue是一种先进先出(First In First Out,FIFO)的数据结构,它有两个出口。一个模板容器适配器类,它提供功能的限制,限制对一些基本容器类型的前端和后端元素的访问权限。 可以在后端添加或从前端移除元素,并且可以在队列的任何一端检查元素。适用于队列的基础容器类包括 deque 和 list队列容器允许从一端新增元素,从另一端移除元素队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为队列中进数据称为 — 入队原创 2021-11-01 23:17:26 · 670 阅读 · 0 评论 -
C++ String容器
String容器1. string基本概念本质:string是C++风格的字符串,而string本质上是一个类string和char * 区别:char * 是一个指针string是一个类,类内部封装了char*,管理这个字符串,是一个char*型的容器。特点:string 类内部封装了很多成员方法例如:查找find,拷贝copy,删除delete 替换replace,插入insertstring管理char*所分配的内存,不用担心复制越界和取值越界等,由类内部进行负责2. 运原创 2021-11-01 22:20:44 · 208 阅读 · 0 评论 -
C++ STL Vector容器详解
vector容器1 vector基本概念功能:vector数据结构和数组非常相似,也称为单端数组vector与普通数组区别:不同之处在于数组是静态空间,而vector可以动态扩展动态扩展:并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间vector容器的迭代器是支持随机访问的迭代器2 函数名称说明assign清除矢量并将指定的元素复制到该空矢量。at返回对矢量中指定位置的元素的引用。back返回原创 2021-11-01 22:06:37 · 201 阅读 · 0 评论 -
C++STL标准库容器
C++ 标准库容器标准库为相关对象的存储集合提供了各种类型安全容器。容器是类模板。声明容器变量时,请指定容器将保存的元素的类型。可以使用初始值设定项列表构造容器。它们具有用于添加和删除元素以及执行其他操作的成员函数。可使用迭代器循环访问容器中的元素以及访问单个元素。可以使用其成员函数、运算符和全局函数显式使用iterator。还可以隐式使用它们,例如通过使用范围for循环。所有C++标准库容器的迭代器都有一个通用接口,但是每个容器都会定义自己的专用迭代器。容器可以分为三个类别:序列容器、关联容器和容原创 2021-11-01 21:55:19 · 448 阅读 · 0 评论 -
Leetcode学习之栈和队列
1. 栈和队列理论基础队列是先进先出,栈是先进后出。如图所示:首先大家要知道 栈和队列是STL(C++标准库)里面的两个数据结构。C++标准库是有多个版本的,要知道我们使用的STL是哪个版本,才能知道对应的栈和队列的实现原理。那么来介绍一下,三个最为普遍的STL版本:HP STL 其他版本的C++ STL,一般是以HP STL为蓝本实现出来的,HP STL是C++ STL的第一个实现版本,而且开放源代码。P.J.Plauger STL 由P.J.Plauger参照HP STL实现出来的,被V原创 2021-10-30 15:18:15 · 3900 阅读 · 0 评论 -
LeetCode刷题指南
LeetCode学习刷题不能毫无目的的刷题,应该是按照模块进行学习,我在学习的过程中,也不断整理了各个模块内容,有兴趣的小伙伴可以一起学习哦!!!数组学习链接链表学习链接哈希表学习链接字符串学习链接...原创 2021-10-27 20:33:12 · 292 阅读 · 0 评论 -
Leetcode学习之字符串
字符串学习1. 反转字符串题目链接编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例 1:输入:[“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]示例 2:输入:[“H”,“a”,“n”,“n”,“a”,“h”]输出:[“h”,“a”,“n”原创 2021-10-27 20:28:51 · 3443 阅读 · 0 评论 -
vector.size()切记不要减一个数字!!!
vector是我们常用的一个类似数组的使用方法,那么优势我们用到for循环, 自然而然的要用vector.size()限制,但有时,会发现其实根本不用整个size(),就·聪明的·改成size()-1这种情况,然后就报错,报错!报错!!!!,具体原因在哪里?查阅资料,可以发现 vector.size()返回值类型是unsigned int,没有符号啊,你这么-1,直接补码到最大值,天,你的结果能正确吗?务必不要size()-1!!! 老老实实的!!!...原创 2021-10-23 10:27:34 · 564 阅读 · 0 评论 -
Leetcode学习之哈希函数
哈希函数1. 哈希理论基础哈希函数,把学生的姓名直接映射为哈希表上的索引,然后就可以通过查询索引下表快速知道这位同学是否在这所学校里了。哈希函数如下图所示,通过hashCode把名字转化为数值,一般hashcode是通过特定编码方式,可以将其他数据格式转化为不同的数值,这样就把学生名字映射为哈希表上的索引数字了。如果hashCode得到的数值大于 哈希表的大小了,也就是大于tableSize了,怎么办呢?此时为了保证映射出来的索引数值都落在哈希表上,我们会在再次对数值做一个取模的操作,就要我们就原创 2021-10-20 13:54:01 · 551 阅读 · 0 评论 -
数组替代哈希表减少内存和空间消耗
灵感来源:给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。力扣(LeetCode)https://leetcode-cn.com/problems/valid-anagram/class Solution {public: bool isAnagram(string s, string t) { if (s.size() != t.size()) return原创 2021-10-17 14:29:44 · 406 阅读 · 0 评论 -
Leetcode学习之链表
链表1. 链表基础什么是链表,链表是一种通过指针串联在一起的线性结构,每一个节点是又两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。链接的入口点称为列表的头结点也就是head。如图所示:1.1 链表类型单链表双链表单链表中的节点只能指向节点的下一个节点。双链表:每一个节点有两个指针域,一个指向下一个节点,一个指向上一个节点。双链表 既可以向前查询也可以向后查询。如图所示:循环链表循环链表,顾名思义,就是链表原创 2021-10-16 14:08:16 · 626 阅读 · 2 评论