![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 79
@BangBang
这个作者很懒,什么都没留下…
展开
-
BFS和DFS优先搜索算法
因此,BFS是具有最短路的性质的。在BFS中,可以使用队列来存储待搜索的节点。通过这种方式,BFS可以找到起点到目标节点的最短路径。在实际应用中,BFS还可以用于拓扑排序、连通性检测等问题的解决。在实际应用中,DFS还可以用于拓扑排序、连通性检测等问题的解决。如果分别用DFS 与 BFS 将二叉树的所有结点遍历一遍,那么它们遍历结点的。接下来,让我们先看看在二叉树上进行 BFS 遍历和 DFS 遍历的代码比较。它是一种图遍历算法,它从一个起始点开始,这样,队列中的节点总是按照它们距离起点的距离排序,原创 2024-05-15 12:57:48 · 594 阅读 · 0 评论 -
C++面试高频问题汇总( 一)
将属性和行为作为一个整体,表现生活中的事物。将属性和行为加以权限控制在设计类的时候,属性和行为写在一起,表现事物。类在设计时,可以把属性和行为放在不同的权限下,加以控制。访问权限有三种:public 公共权限;protected 保护权限;private 私有权限多态分为两类静态多态: 函数重载 和 运算符重载属于静态多态,复用函数名动态多态: 派生类和虚函数实现运行时多态静态多态的函数地址早绑定 - 编译阶段确定函数地址动态多态的函数地址晚绑定 - 运行阶段确定函数地址。原创 2024-02-20 23:15:52 · 947 阅读 · 0 评论 -
makefile 学习(5)完整的makefile模板
这里报错了,因为缺少了cuda的库文件,下面是查看自己cuda版本和找到在哪里的指令,以我的CUDA11.7为例, 去到目录下看看有什么库文件,我们当前需要一个cudaruntime的头文件。这里定义的名称参数 workspace 和 binary 是用来指定工作空间和生成的可执行文件名称的。在这个 Makefile 中,表示生成的可执行文件的名称。这些参数可以在 Makefile 中的其它规则中使用,例如在。表示的是工作空间的目录名称,来看看最后要完成的工程目录。原创 2023-11-25 22:42:53 · 326 阅读 · 0 评论 -
C++ Eigen 矩阵运算
Array 提供了一个Array类,也提供了大量的矩阵未定义的操作,且Array和Matrix之间很容易相互转换 ,所以相当于给矩阵提供更多的方法。上述例子中的块操作方法作为表达式的右值,意味着是只读形式的,然而,块操作也可以作为左值使用,意味着你可以给他赋值。点积可以用于任意尺寸的向量,当使用复数时,Eigen的点积操作是第一个变量为共轭线性的,第二个为线性的。如果想使用其他元素级的范数,使用lpNorm()方法,当求无穷范数时,模板参数p可以取特殊值Infinity,得到的是所有元素的最大绝对值。原创 2023-10-17 13:45:43 · 896 阅读 · 0 评论 -
C++学习: 文件I/O
文件I/O(Input/Output)指的是程序与外部文件之间的数据传输操作。在许多编程语言中,包括C、C++、Python等,都提供了用于进行文件 I/O 操作的内置函数或库。读取文件和写入文件。1.打开文件:使用文件打开函数(如fopen)打开待读取的文件,指定文件名和打开模式(如只读、读写等)。2.读取文件内容:使用文件读取函数(如等)从打开的文件中读取内容,将内容保存到程序中的变量中进行处理。3.关闭文件:使用文件关闭函数(如fclose)关闭已打开的文件,释放系统资源。原创 2023-10-16 21:54:46 · 131 阅读 · 0 评论 -
Linux学习: 压缩及解压缩命令tar|zip|rar|xz
不管是在Linux还是其他操作系统中,关于数据的压缩和解压缩操作是经常被用到的。原创 2023-10-16 14:06:04 · 6278 阅读 · 0 评论 -
c++三种实例化对象方式
参考 : https://blog.csdn.net/bitcarmanlee/article/details/124218284首先我们定义一个测试类然后我们在main方法中隐式创建Person对象2.显示创建当然,我们也可以像其他编程语言一样,显示创建一个对象这种方式,与上面的第一种方式原理基本一直。当然我们还可以用new关键字来创建对象注意new出来的对象,都需要用指针接收。上面三种方式可以认为是两种方式,因为第一种方式与第二种方式基本相同。那么具体区别在哪里?p1对象位于栈空间。p5对原创 2023-07-10 15:58:45 · 1158 阅读 · 0 评论 -
多线程(3): 线程同步
线程p1睡醒了之后,又抢到了cpu时间片,继续从原来的位置向下执行,执行完成之后,通过pthread_mutex_unlock(&mutex)把互斥锁mutex解锁,解锁后线程。,被锁定的这个代码块,所有的线程只能顺序执行 (不能并行处理),这样多线程访问共享资源数据混乱的问题就可以被解决了,需要付出的代价就是执行效率的降低,因为默认临界区多个线程是可以并行处理的,现在只能串行处理。,因为临界区内只允许一个线程同时执行,所以多线程是串行执行的,执行效率比较低,所以我们要缩小代码块的范围。原创 2023-07-10 14:17:25 · 116 阅读 · 0 评论 -
多线程(2):线程同步
共享数据就是多个线程共同访问的一块资源,也就是一块内存。假设有3个线程,其中A,B线程在同一个时间点往这块内存中写数据,于此同时C线程往这块内存中读数据,注意事同一个时间点,如果不是一个时间点就没有线程同步的问题了,假设有 4 个线程 A、B、C、D,当前一个线程 A 对内存中的共享资源进行访问的时候,其他线程 B, C, D 都不可以对这块内存进行操作,直到线程 A 对这块内存访问完毕为止,B,C,D 中的一个才能访问这块内存,剩余的两个需要继续阻塞等待,以此类推,直至所有的线程都对这块内存操作完毕。原创 2023-07-08 19:25:51 · 242 阅读 · 0 评论 -
多线程(1): 线程的创建、回收、分离
多线程在项目开发过程中使用频率非常高,因为使用多线程可以提高程序的并发性。(1)多线程2)多进程。但是多线程对系统资源的消耗会更加少一些,并且线程和进程执行效率差不多。在执行系统应用程序时,应用程序需要占用cpu资源,电脑上cpu核是有限的, 假设PC上有8核CPU,但同时执行了100个应用程序。为什么看起来这100个执行程序可以同时运行呢?这其实是一个假象,cpu会把单位时间分为若干份,每一份就是一个cpu时间片,cpu每个时间片很短,是纳秒级别。原创 2023-07-08 18:33:25 · 624 阅读 · 0 评论 -
for 循环 auto
作者: 苏丙榅链接:在 C++98/03 中,不同的容器和数组遍历的方式不尽相同,写法不统一,也不够简洁,而 C++11 基于范围的 for 循环可以以简洁、统一的方式来遍历容器和数组,用起来也更方便了。原创 2023-07-07 16:42:52 · 1121 阅读 · 0 评论 -
原始字面量
在 C++11 之前如果一个字符串分别写到了不同的行里边,需要加连接符,这种方式不仅繁琐,还破坏了表达式的原始含义,如果使用原始字面量就变得简单很多,很强直观,可读性强。比如:编程过程中,使用的字符串中常带有一些特殊字符,对于这些字符往往要做专门的处理,使用了原始字面量就可以轻松的解决这个问题了,如果在()前后指定了字符串,那么前后的字符串必须相同,否则会出现语法错误。中,原始字符串必须用括号()括起来,括号的前后可以加其他字符串,通过输出的信息可以得到如下结论:使用原始字面量。最后强调一个细节:在R。原创 2023-07-03 10:36:56 · 223 阅读 · 0 评论 -
静态断言 static_assert
是一种编程中常用的手段。在通常情况下,。比如:一个函数总需要输入在一定的范围内的参数,那么程序员就可以对该参数使用断言,以迫使在该参数发生异常的时候程序退出,从而避免程序陷入逻辑的混乱。从一些意义上讲,断言并不是正常程序所必需的,不过对于程序调试来说,通常断言能够帮助程序开发者快速定位那些违反了某些前提条件的程序错误。如果我们要在C++程序中使用断言,需要在程序中包含头文件或,头文件中为我们提供了 assert 宏,用于在运行时进行断言。举例说明:在程序的第9行,使用了断言 ,这是一个宏,它的参数是一个表原创 2023-07-03 09:59:18 · 251 阅读 · 0 评论 -
vector 容器初始化(1维,2维等)
C++中容器vector非常常见,有时候需要事先定义其容器的长度,其中包括一维、二维容器长度的定义,其中二维容器定义可以用于存储二维数组,用于点云数据组织,分块处理等,下面分别介绍一维与二维容器的初始化。原创 2023-06-30 14:04:11 · 1486 阅读 · 0 评论 -
c++ 强类型枚举
作者: 苏丙榅链接: https://subingwen.cn/cpp/enum/原创 2023-06-25 11:14:01 · 570 阅读 · 0 评论 -
c++ 多线程: this_thread的使用
是 C 及 C++ 中一个基本的内置类型,不过也是一个有点” 奇怪” 的类型。从枚举的本意上来讲,就是要定义一个类别,并穷举同一类别下的个体以供代码中使用。由于枚举来源于 C,所以出于设计上的简单的目的,枚举值常常是对应到整型数值的一些名字,比如:在枚举类型中的枚举值编译器会默认从 0 开始赋值,而后依次向下递增,也就是说 。C/C++ 的 enum 有个很” 奇怪” 的设定,就是具名(有名字)的enum类型的名字,以及 enum 的成员的。这与 C++ 中具名的 namespace、class/stru原创 2023-06-25 10:25:12 · 810 阅读 · 0 评论 -
using 的使用
在 C++ 中可以通过typedeftypedef 旧的类型名 新的类型名;// 使用举例 typedef unsigned int uint_t;被重定义的类型并不是一个新的类型,仅仅只是原有的类型取了一个新的名字。和以前的声明语句一样,这里的声明符也可以包含类型修饰,从而也能由基本数据类型构造出复合类型来。C++11 中规定了一种新的方法,使用别名声明 (alias declaration) 来定义类型的别名,即使用 using。在使用的时候,关键字using。原创 2023-06-24 18:40:42 · 380 阅读 · 0 评论 -
vscode c++ 环境配置(终极版)
配置c++ 编译时的选项,包括编译器的路径、C/C++标注, 指定头文件的搜索路径(如opencv等)该工具可以自动识别MinGW编译器的安装位置,如果没有添加到环境变量中,它会自动帮忙配置到环境变量。,这样将3个json拷贝到其他目录,也可以运行和调试c++程序。如果未下载MinGW,它会提示你下载,然后帮忙自动配置环境变量。: 设置头文件的搜索路径,让编译器可以找打相应的头文件。完成安装后,会自动在你选择的工作路径下,生成配置好的。,三个json文件的按照我提供的配置。设置c++ debug的选项。原创 2023-06-23 14:28:52 · 19041 阅读 · 5 评论 -
CMake学习(7): CMake的嵌套
博客参考自:爱编程的大丙:,仅供学习分享使用如果项目很大,或者项目中有很多的源码目录,在通过 CMake 管理项目的时候如果只使用一个,那么这个文件相对会比较复杂,有一种化繁为简的方式就是给每个源码目录都添加一个文件(头文件目录不需要),。calc 目录includesort 目录includetest1 目录加、减、乘、除test2 目录从目录结构可以看出,最终会生成两个可执行文件,一个是计算器相关的,一个是排序相关的。如果把所有操作都写在顶层的中,那么这个的内容就会比较复杂了。原创 2023-06-11 23:48:53 · 1710 阅读 · 5 评论 -
CMake学习(6): 打印日志信息及宏定义
当我们在项目开发期间,为了进行程序测试,会在代码里面做大量的日志输出,比如通过等做日志输出。当项目开发完后,调试没有debug时,我们要发布这个程序的时候,就需要把代码中所有调试信息删除掉。因为程序如果有大量的日志输出,它会影响执行效率。假设我们项目1000个源文件,每个源文件有100条日志输出,那么在删除日志的时候,其实是非常痛苦并且繁琐的。可以通过定义宏,来控制日志是否输出int a = 10;# ifdef DEBUG printf("我是一个程序猿, 我不会爬树...\n");原创 2023-06-11 21:51:34 · 3022 阅读 · 0 评论 -
CMake学习(5): 链接静(动)态库
通过可以生成我们所需的动态库或者静态库,我们要把制作出的。在发布的时候需要提供两种文件(1) 库文件(静态库/动态库)(2)头文件(保存了库文件中函数、变量申明);库文件对应的就是源文件,只不过我们对若干的源文件做了打包操作生成了一个二进制文件。在编写程序的过程中,可能会用到一些系统提供的动态库或者自己制作出的动态库或者静态库文件,cmake 中也为我们提供了相关的加载动态库的命令。原创 2023-06-06 23:09:25 · 9499 阅读 · 3 评论 -
CMake学习(4):制作库文件——静态库/动态库
有些时候我们编写的源代码并不需要将他们编译生成可执行程序,而是生成一些静态库或动态库提供给第三方使用,下面来讲解在 cmake 中生成这两类库文件的方法。原创 2023-06-05 23:39:54 · 2859 阅读 · 1 评论 -
CMake 学习(3): 文件搜索
如果一个项目里边的源文件很多,在编写 CMakeLists.txt 文件的时候,这样太麻烦也不现实。所以,在 CMake 中为我们提供了搜索文件的命令,可以使用命令或者 file 命令。原创 2023-06-05 22:52:56 · 1343 阅读 · 0 评论 -
CMake学习(1): CMake基本使用
CMake是一个项目构建工具,并且是跨平台的。Cmake跟Makefile其实是差不多的,只不过makefile更底层些。大多是 IDE 软件都集成了 make,比如:VS 的 nmake、linux 下的 GNU make、Qt 的 qmake 等,如果自己动手写 makefile,会发现,makefile 通常依赖于当前的编译平台,而且编写 makefile 的工作量比较大,解决依赖关系时也容易出错。而 CMake 恰好能解决上述问题, 其允许开发者指定整个工程的编译流程,在根据编译平台,原创 2023-06-05 22:00:34 · 705 阅读 · 0 评论 -
makefile 学习(4): makefile基础
变量在声明时候需要给予初值, 在使用时,需要给变量名前加上符号,并以()把变量给包括起来。除了自定义的变量,makefile还提供了一些预定义的变量,可以很方便减少command中的语句。$@: 目标(target)的完整名称$原创 2023-05-20 23:33:03 · 597 阅读 · 0 评论 -
makefile 学习(3):C++的编译及库文件的生成与链接
C++语言的相关后缀.a 文件是一个静态库文件.c.c++.cp.cpp.cc.cxx这几种后缀都可以表示c++的源文件.h.hppc++语言的头文件.i是c++预处理文件.o目标文件.s汇编语言的文件.so 动态库或者共享库或者称为运行时库源文件.cpp文件 -> 预编译成.i文件 -> 编译成汇编语言.s -> 汇编成.o文件 -> 链接成可执行文件(名字自定义,后缀没关系)原创 2023-05-18 09:41:32 · 725 阅读 · 0 评论 -
makefile 学习(2):C语言的编译及库文件的生成与链接
编译C语言的相关后缀.a 文件是一个静态库文件.c文件是c语言的源文件.hc语言的头文件.i是预处理文件.o目标文件.s汇编语言的文件.so动态库或者共享库或者称为运行时库.c文件在github中可以看到另一种后缀,比如.cc或者是其他的后缀,但是常用的还是.c后缀。在makefile 学习(1):C/C++ 编译过程, 我们讲到编译过程包括4个步骤: (1)预处理,(2)转换为汇编语言,(3) 生成目标文件(4) 链接为可执行文件。原创 2023-05-17 23:24:12 · 2095 阅读 · 0 评论 -
makefile 学习(1):C/C++ 编译过程
GCC 官方文档官方文档是最权威的,网上所有的答案都来自官方文档国内论坛参差不齐,找到好的答案比较花时间,并且很容易被错误的文档误导。所以推荐看官方文档靠谱点,并且可以提升英语阅读能力GCC(GNU Compiler Collection) GNU编译程序集合, 其他所有开放源码软件都在某种程度上依赖于它,甚至其他语言,例如Python都是由C语言开发,由GNU编译程序编译的。原创 2023-05-17 17:34:43 · 828 阅读 · 0 评论 -
opencv c++基础
转自博客: https://blog.csdn.net/m0_60005621/article/details/123544052原创 2023-04-18 13:18:21 · 122 阅读 · 0 评论 -
opencv各种库的作用
详情,请参考博文:原创 2023-03-09 14:18:11 · 137 阅读 · 0 评论 -
CMakeList常用命令
https://blog.csdn.net/weixin_44966641/article/details/122355304原创 2023-03-07 20:23:37 · 107 阅读 · 0 评论 -
C++ vector和Mat 转换
C++ vector和Mat 转换。原创 2022-12-23 16:46:07 · 1363 阅读 · 0 评论 -
c++ 11 实用新特性讲解
1.共享智能指针2.独占智能指针3.弱引用智能指针博客:B站:原创 2022-12-17 18:50:48 · 262 阅读 · 0 评论 -
C++11 Lambda 表达式
lambda表达式:也就是匿名函数,也可以称作闭包(Closure),字面意义是没有名字的函数。它可以很方便地让我们随手定义函数,并把函数当做参数,给其他函数调用。这样的代码写起来很简洁,读起来也直观。举例1:对序列如何从小到大排序呢?,可以通过定义匿名函数的方式实现。// ab从大到小排序 };}sort第3个参数,传入的就是匿名函数,这样的写法相比原始的c++要灵活简洁很多。原创 2022-12-17 16:29:37 · 242 阅读 · 0 评论 -
markfile 讲解1
定义src \使用$@ 目标(target)的完整名称。$原创 2022-12-02 19:47:03 · 803 阅读 · 0 评论 -
CMake GLOB_RECURSE使用介绍
顺便说一下,在顶级目录中执行文件 (GLOB_RECURSE …) 可能会在构建文件夹中从源文件构建中 (也就是构建根位于 “TopDir” 内部) 中拾取不需要的 cpp 文件).原创 2022-11-30 18:09:26 · 4127 阅读 · 0 评论 -
c++ 11:二叉树练习
一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。,树中的每个元素被称为树的节点,每个节点有若干个指针指向子节点。深度优先算法最自然的实现方式是通过递归实现,事实上,大部分树相关的面试问题都可以优先考虑递归。二叉树,是指对于树中的每个节点而言,至多有左右两个子节点,即任意节点的度小于等于2.在免税中,关于树的面试问题非常常见,尤其是关于二叉树,二叉树搜索树的问题。...原创 2022-08-15 08:53:47 · 217 阅读 · 0 评论 -
C++练习11: 栈 和队列
栈(stack): 具有先进后出,后进先出的特点。C++ Stack(堆栈)是一个容器类的改编,为程序员提供了堆栈的全部功能,——也就是说实现了一个先进后出(FILO)的数据结构。empty() 堆栈为空则返回真 pop() 移除栈顶元素 push() 在栈顶增加元素 size() 返回栈中元素数目 top() 返回栈顶元素C++ stack 的栈是不能遍历的队列(Queue): 具有先进先出的特点。q . empty() 如果队列为空返回true,否则返回false。...原创 2022-08-06 20:03:08 · 367 阅读 · 0 评论 -
c++练习(10):链表练习
寻找特定位置,runner以两倍速前进,chaser一倍速,当runner到达tail时,chaser即为所求解。给定一个链表和一个数值,写一个函数重新排序链表,使得小于给定值的节点排在链表的左边,大于给点值的节点排在链表右侧。在head之前并指向head只要涉及操作head节点,当头节点操作不确定的时候,不妨创建dummynode;并且可以用一个简单的小testcase来验证(例如长度为4和5的list)对于寻找list某个特定位置的问题,不妨用两个变量。链表的头节点是否为。...原创 2022-07-31 11:46:45 · 903 阅读 · 0 评论 -
C++面试题
答面向对象是一种对现实世界理解和抽象的方法、思想,通过将需求要素转化为对象进行问题处理的一种思想。多态是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态。用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元即为内存泄露。使用的时候要记得指针的长度。malloc的时候得确定在那里free.对指针赋值的时候应该注意被赋值指针需要不需要释放.动态分配内存的指针最好不要再次赋值.答。...原创 2022-07-28 23:24:44 · 154 阅读 · 0 评论