
C++
文章平均质量分 70
C++
fakerth
我喜欢去衡量探索,迎接那些最强烈,最有理由吸引我的一切;而不是抓着称杆,试图减轻一些分量,我不会去假想一种状况,而是接受现实;我只沿着我能够旅行的唯一路径去旅行,在这条路径上,没有任何力量能够阻挡我。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
pair与tuple
pair是 C++ STL(标准模板库)中的一个模板类,用于表示一对相关的对象。它是一个简单的容器,存储两个数据项,它们可以是不同类型的。pair 常用于需要将两个元素一起操作的情况,例如在处理字典(映射)数据结构时,键值对就是一个常见的 pair 示例。原创 2025-04-09 14:25:34 · 634 阅读 · 0 评论 -
C++11新特性
C++11是C++编程语言的一个重要版本,正式发布于2011年。它引入了许多新特性和改进,提升了语言的表达能力和性能,原创 2025-04-09 12:49:52 · 598 阅读 · 0 评论 -
计算机面试八股(自整)
整理的面试问题,方便查询复习原创 2025-04-07 14:28:37 · 688 阅读 · 0 评论 -
C++多线程编程
在 C++ 中,多线程编程可以用来提高程序的性能,尤其是当程序涉及到计算密集型或 I/O 密集型任务时。C++11 引入了对多线程的直接支持,使得创建和管理线程变得更为简便。原创 2025-02-22 18:40:20 · 800 阅读 · 0 评论 -
【C++】set,mutiset与unordered_set
std::set 和 std::multiset 都是有序容器,基于红黑树实现,提供了良好的查找、插入和删除操作的时间复杂度(O(log n)),但 std::set 不支持重复元素,std::multiset 支持重复元素。std::unordered_set 是基于哈希表实现的无序容器,提供平均 O(1) 的查找、插入和删除时间复杂度,适用于对查找效率有较高要求的场景,但不关心元素的顺序。原创 2025-02-21 17:45:54 · 1017 阅读 · 0 评论 -
C++面经
C++面经原创 2025-02-16 17:40:19 · 716 阅读 · 0 评论 -
反转链表、链表内指定区间反转
链表(Linked List)是一种线性数据结构,其中的元素(通常称为节点)按顺序排列,每个节点包含两部分信息:存储数据的部分和指向下一个节点的指针或引用。链表中的每个节点通过指针连接在一起,因此它不需要在内存中连续存储。原创 2024-11-17 20:17:20 · 1215 阅读 · 0 评论 -
数据结构与算法的基本概念
绪论一、基本概念及术语:1.数据:2.数据元素、数据项:3.数据对象、数据结构:二、数据结构三要素:1.逻辑结构:①集合:结构中的数据元素同属于一个集合,别无其它关系。②线性结构:结构中的数据元素之间只存在一对一的关系。③树形结构:结构中的数据元素存在一对多的关系。④图状结构或网状结构:结构中的元素存在多对多的关系。2.存储结构(物理结构):①顺序存储:把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中。元素之间的关系由存储单元的邻接关系来体现。②链式存储:逻辑上相邻的元素在物理位置上可以不相邻,借助指示原创 2021-06-02 21:58:00 · 3114 阅读 · 0 评论 -
哈夫曼树计算最短带权路径
定义给定一组具有确定权值的叶子节点,带权路径长度最小的二叉树就叫做哈夫曼树。特点1.权值越大的叶子节点越靠近根节点,而权值越小的叶子节点越远离根节点。2.只有度为0和2的节点,不存在度为1的节点。基本思想⑴ 初始化:由给定的n个权值{w1,w2,…,wn}构造n棵只有一个根结点的二叉树,从而得到一个二叉树集合F={T1,T2,…,Tn};⑵ 选取与合并:在F中选取根结点的权值最小的两...原创 2019-06-21 15:52:52 · 4388 阅读 · 2 评论 -
线性表的相关概念
线性表一、线性表的定义和基本操作1.线性表的定义注意:2.线性表的基本操作:二、线性表的顺序表示1.顺序表的定义:注意:2.顺序表上基本操作的实现①插入操作②删除操作③按值查找一、线性表的定义和基本操作1.线性表的定义线性表是具有相同数据类型的n(n≥0)个数据元素的有限序列,其中n为表长,当n=0时,该线性表是一个空表。若用L命名线性表,则其一般表示为L=(a1,a2,a3,.……,an)式中,a1是唯一的“第一个”数据元素,又称表头元素;an是唯一的“最后一个”数据元素,又称表尾元素。得出线性原创 2021-06-02 22:01:04 · 735 阅读 · 0 评论 -
C++数据结构之栈与队列
C++数据结构之栈与队列先讲一个笑话,怎样判断一个人是否是程序员?答:问他push的反义词是什么。回答pull的是普通人,回答pop的才是程序员,push和pop就是栈和队列中要用到的函数。栈栈是一种线性存储结构,元素遵循“先进后出”,并且只能在栈顶进行插入和删除,附上代码演示栈的用法,超详细。#include<iostream>#include<stack>//...原创 2019-05-22 09:29:24 · 702 阅读 · 2 评论 -
最小生成树:Kruskal算法
前言:关于最小生成树的另一种算法,附上链接https://blog.csdn.net/weixin_43912621/article/details/94412304.,希望可以帮助到大家。Kruskal算法基本思想:Kruskal算法是一种贪心算法的应用,首先构造一个只含 n 个顶点、而边集为空的子图,把子图中各个顶点看成各棵树上的根结点,之后,从网的边集 E 中选取一条权值最小的边,若该...原创 2020-03-25 18:56:05 · 609 阅读 · 0 评论 -
简单应用不定长数组vector
vectorvector是表示可变大小数组的序列容器。vector采用连续存储空间来存储元素,这点和数组一毛一样,也就是意味着可以采用下标对vector的元素进行访问,一样的高效。但是和数组不同,它的大小是可以动态改变的,而且它的大小会被容器自动处理。怎么样,是不是心动啦?简单应用vector用起来还是比较方便的,也有着优势,所以我大致整理了一下比较实用的vector函数,放在代码中实现(超...原创 2019-06-04 00:39:51 · 310 阅读 · 0 评论 -
单链表的查找、插入与删除结点
1.单链表查找结点:①.按序号查找结点值:什么都不说了,课本上的代码yyds,本来觉得课本上的代码不够完整,自己写着写着就越发觉得课本上的代码极其精妙。LNode* Get(LinkList L, int i) {//按序号查找结点值 int j = 1;//初始为1 LNode* p = L->next; if (i < 0) {//无效返回空 return NULL; } else if (i == 0) { re原创 2021-06-02 21:30:02 · 974 阅读 · 1 评论 -
最短路径之Floyd算法,简单如一
前言如果求出每两点之间的最短路,不必多次调用Dijkstra算法,有一个更简单的算法叫Floyd算法。基本思想对于从vi到vj的弧,进行n次试探:首先考虑路径vi,v0,vj是否存在,如果存在,则比较vi,vj和vi,v0,vj的路径长度,取较短者为从vi到vj的中间顶点的序号不大于0的最短路径。在路径上再增加一个顶点v1,依此类推,在经过n次比较后,最后求得的必是从顶点vi到顶点vj的最短...原创 2019-05-25 21:27:55 · 403 阅读 · 0 评论 -
二叉树的三种递归遍历过目不忘
三种遍历如下面这颗二叉树:前序遍历序列:A B D G C E F中序遍历序列:D G B A E C F后序遍历序列:G D B E F C A前序遍历若二叉树为空,则空操作返回;否则:①访问根结点;②前序遍历根结点的左子树;③前序遍历根结点的右子树。void Pre(BiTree T)//递归方式前序遍历二叉树{ if (T == NULL) r...原创 2019-05-24 01:48:02 · 338 阅读 · 0 评论 -
建立一棵二叉排序树
定义二叉排序树(也称二叉查找树),或者是一棵空的二叉树,或者是具有下列性质的二叉树:⑴ 若它的左子树不空,则左子树上所有结点的值均小于根结点的值;⑵ 若它的右子树不空,则右子树上所有结点的值均大于根结点的值;⑶ 它的左右子树也都是二叉排序树。中序遍历二叉排序树可以得到一个按关键码的有序数列。建树脱胎于二叉树,区别是每个节点数据要进行比对,再进行插入,小插左,大插右,直接上代码,清楚明...原创 2019-06-03 23:53:28 · 9812 阅读 · 0 评论 -
简单易理解的拓扑排序算法
拓扑排序理解拓扑排序,首先要大致了解一下拓扑序列,设G=(V,E)是一个具有n个顶点的有向图,V中的顶点序列v1, v2, …, vn称为一个拓扑序列,那么这个序列当且仅当满足下列条件:若从顶点vi到vj有一条路径,则在顶点序列中顶点vi必在顶点vj之前。拓扑排序就是对一个有向图构造拓扑序列的过程。基本思路1.从有向图中选择一个没有前驱(度为0)的顶点输出。2.从有向图中删去该顶点,并删去...原创 2019-05-23 20:13:25 · 731 阅读 · 0 评论 -
最小生成树:prim算法
生成树的代价设G = (V, E)是一个无向连通网,生成树上各边的权值之和称为该生成树的代价。最小生成树在图G所有生成树中,代价最小的生成树称为最小生成树。prim算法基本思想设G=(V, E)是具有n个顶点的连通网,T=(U, TE)是G的最小生成树, T的初始状态为U={u0}(u0∈V),TE={ },重复执行下述操作:在所有u∈U,v∈V-U的边中找一条代价最小的边(u, v)并...原创 2019-07-01 22:53:37 · 512 阅读 · 0 评论 -
Shell、C/C++、Python操作环境变量
环境变量是一种在操作系统中用于存储信息的机制,这些信息可以被系统进程、应用程序和脚本访问和使用。环境变量在操作系统中的作用类似于一个全局配置参数,它们定义了操作系统的运行环境,包括系统行为、应用程序路径、用户信息等。环境变量是以键值对(key-value pair)形式存在的,每个环境变量都有一个名称(键)和一个与之对应的值。环境变量的名称通常是全大写字母,遵循命名规则,可以包含字母、数字、下划线 _,但不能包含空格。原创 2024-08-13 16:02:00 · 751 阅读 · 0 评论 -
MPI安装与程序设计
MPI(Message Passing Interface)是一种用于编写并行程序的标准和库,用于在分布式内存系统中进行消息传递和并行计算。MPI提供了一组函数和语义,用于在多个进程之间进行通信和同步,以实现并行计算和并行任务的协调。MPI在高性能计算领域被广泛应用,用于开发并行和分布式内存计算应用程序。它提供了丰富而强大的功能,使得开发者能够充分利用并行计算资源,提高计算效率和性能。MPI有很多种实现。MPICH是其中的MPI实现之一。原创 2023-12-22 17:37:26 · 1372 阅读 · 0 评论 -
文件操作(open与fopen,write与fwrite,read与fread)
fopen函数是标准I/O库函数的一部分,它提供了更高级别的文件操作功能,例如缓冲、格式化输入输出等。而open函数直接与底层文件系统交互,提供了更底层的文件操作。linux下的fopen是open的封装函数,fopen最终还是要调用底层的系统调用open。选择使用open还是fopen取决于你的需求和使用环境。如果你需要更底层的文件操作或者在特定的系统调用接口上工作,可以选择使用open函数。如果你更倾向于使用标准C库函数以及提供的高级别文件操作功能,可以选择使用fopen函数。原创 2023-12-20 20:32:10 · 1110 阅读 · 0 评论 -
【C++】模板
模板是一种参数化的多态工具。所谓参数化的多态性,是指将程序所处理的对象的类型参数化,使一段程序代码可以用于处理多种不同类型的对象。采用模板编程,可以为各种逻辑功能相同而数据类型不同的程序提供一种代码共享的机制。原创 2023-06-21 17:26:37 · 455 阅读 · 0 评论 -
【C++】I/O流类库
数据的输入和输出(input/output简写为I/O),对标准输入设备和标准输出设备的输入输出简称为标准I/O。对在外存磁盘上的文件输入输出简称为文件I/O。对内存中指定的字符串存储空间的输入输出简称为串I/O。原创 2023-06-19 22:11:30 · 730 阅读 · 0 评论 -
【C++】auto_ptr在单例模式中的应用,宏实现sizeof与align
auto_ptr 是C++标准库提供的类模板,auto_ptr对象通过初始化指向由new创建的动态内存,它是这块内存的拥有者,一块内存不能同时被分给两个拥有者。当auto_ptr对象生命周期结束时,其析构函数会将auto_ptr对象拥有的动态内存自动释放。即使发生异常,通过异常的栈展开过程也能将动态内存释放。auto_ptr不支持new 数组。auto_ptr构造时取得某个对象的所有权,在析构时释放该对象。原创 2023-06-19 15:58:57 · 318 阅读 · 0 评论 -
【C++】RTTI(runtime type information)
dynamic_cast运算符能够将基类的指针或引用安全的转换为派生类的指针或者引用。转换失败,返回空地址。在dynamic_cast被设计之前,C++无法实现从一个虚基类到派生类的强制转换。dynamic_cast就是为解决虚基类到派生类的转换而设计的。原创 2023-06-17 20:59:17 · 101 阅读 · 0 评论 -
【C++】动态创建对象
对原有的类不做任何更改,只需要增加一个宏就能够实现动态创建。原创 2023-06-16 21:13:33 · 233 阅读 · 0 评论 -
【C++】虚函数与多态
多态性是面向对象程序设计的重要特征之一,是指发出同样的消息被不同类型的对象接受时有可能导致完全不同的行为。多态的实现:函数重载、运算符重载、模板、虚函数。原创 2023-06-15 14:49:35 · 908 阅读 · 0 评论 -
【C++】继承
对基类数据成员的重定义对基类成员函数的重定义分为两种overwrite与基类完全相同与基类成员函数名相同,参数不同override虚函数public :return x_;} int x_;} int x_;Derived d;d . Show();return 0;原创 2023-06-12 19:32:07 · 983 阅读 · 0 评论 -
【C++】String类简单实现([ ]、+、+=、<<、>>运算符重载)
String类简单实现([ ]、+、+=、<<、>>运算符重载)原创 2023-05-14 17:12:14 · 713 阅读 · 0 评论 -
【C++】运算符重载
运算符重载允许把运算符(如+、-、*、/、等)应用于自定义数据类型的对象。直观自然,可以提高程序的可读性,体现了C++语言的可扩充性。运算符重载仅仅只是语法上的方便,它是另一种函数的调用方式。运算符重载本质上是函数重载。不要滥用重载,因为它只是语法上的方便,所以只有在涉及的代码更容易写、尤其是更易读时才有必要重载。原创 2023-05-13 17:49:09 · 128 阅读 · 0 评论 -
【C++】异常
编译错误,即语法错误。程序就无法被生成运行代码。原创 2023-05-01 19:37:18 · 120 阅读 · 0 评论 -
【C++】标准库map类型
map是一种关联式容器,基于key,value来进行存储。采用的数据结构是红黑数。原创 2023-04-19 12:12:06 · 551 阅读 · 0 评论 -
【C++】标准库vector类型
vector是同一种类型的对象的集合。vector的数据结构很像数组,能非常高效和方便地访问单个元素,空间是连续的,并且是可以拓展的。vector是一个类模板(class template)。原创 2023-04-18 21:34:17 · 381 阅读 · 0 评论 -
【C++】标准库string类型
c_str将string转化为const char* const_cast将const char*转化为char*原创 2023-04-18 17:52:12 · 154 阅读 · 0 评论 -
【C++】友元
友元是一种允许非类成员函数访问类的非公有成员的一种机制。可以把一个函数指定为类的友元,称为友元函数。也可以把整个类指定为另一个类的友元,称为友元类。原创 2023-04-17 21:07:27 · 351 阅读 · 0 评论 -
【C++】从C语言实现栈与C++实现栈看数据抽象和封装
C语言实现栈,C++实现栈原创 2023-03-19 22:14:31 · 157 阅读 · 0 评论 -
【C++】对象的使用
static成员,static成员函数,四种对象作用域与生存期,单例模式,const成员函数,const对象,mutable原创 2023-03-19 10:14:13 · 470 阅读 · 0 评论 -
【C++】构造函数与析构函数
构造函数,析构函数,转换构造函数,赋值与初始化的区别,explicit,构造函数初始化列表,对象成员及其初始化,const成员、引用成员的初始化,拷贝构造函数,深拷贝与浅拷贝、赋值操作,禁止拷贝,空类默认产生的成员原创 2023-03-17 22:05:42 · 462 阅读 · 0 评论 -
【C++】类与对象
类声明,公有、私有、保护成员,内联成员函数,成员函数的重载,成员函数缺省参数,类与结构体,隐含的this指针,类作用域,前向说明,嵌套类,局部类原创 2023-03-12 15:09:00 · 229 阅读 · 0 评论