![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++与数据结构
文章平均质量分 58
云之舟_
杂七杂八
展开
-
正则表达式
正则表达式30分钟入门教程 作者:deerchao知乎:正则表达式的15个应用原创 2021-08-30 20:38:07 · 74 阅读 · 0 评论 -
最短路径问题——Dijkstra算法
转载自 Ouyang_LianjunDijkstra算法采用的是一种贪心的策略,声明一个数组dis来保存源点到各个顶点的最短距离和一个保存已经找到了最短路径的顶点的集合:T,初始时,原点 s 的路径权重被赋为 0 (dis[s] = 0)。若对于顶点 s 存在能直接到达的边(s,m),则把dis[m]设为w(s, m),同时把所有其他(s不能直接到达的)顶点的路径长度设为无穷大。初始时,集合T只有顶点s。然后,从dis数组选择最小值,则该值就是源点s到该值对应的顶点的最短路径,并且把该点加入到T中,OK转载 2021-08-08 21:58:58 · 318 阅读 · 0 评论 -
Kruskal算法构造最小生成树——并查集
并查集(Disjoint Set)用于判断一个图里是否有环或者两个结点是否在同一个集合里。设 parent[i] = x 表示结点 i 的父节点为 x并且初始化 parent [ i ] = i当我们随机遍历的时候,我们可能会产生多个树,如果遍历到最后有两个树要合并时,我们一般都是通过链接两个树的的根节点,但是这种算法有一个缺陷:两个结点间要判断成环的成本非常大,时间复杂度达到了O(n)。路径压缩令parent[2]=parent[1]简单来说,a是b的属下,c是b的属下,那么c也是a的属下原创 2021-08-08 21:19:32 · 124 阅读 · 0 评论 -
memset(G, 0x3f, sizeof(G))涵义
1 当我们想将某个数组全部赋值为无穷大时(例如解决图论问题时邻接矩阵的初始化)memset(G, 0x3f, sizeof(G))分析:最精巧的无穷大常量取值是0x3f3f3f3f, 它的十进制是1061109567,也就是10^9级别的,而一般场合下的数据都是小于10^9的,所以它可以作为无穷大使用。2 如果想要将某个数组清零,我们通常会使用memset(G,0,sizeof(G))补充:负无穷大用0xcfcfcfcf比较好。...原创 2021-08-08 15:20:07 · 859 阅读 · 0 评论 -
【数据结构】红黑树
挖坑待填30张图带你彻底理解红黑树原创 2021-07-10 22:57:48 · 95 阅读 · 2 评论 -
MFC框架 afx_msg && CComboBox OnDropdown
MFC afx_msgafx是 application framework 应用程序框架产生的消息映射函数例如:afx_msg void OnBnClickedButton1();其中 afx_msg为消息标志,它向系统声明:有消息映射到函数实现体;而在map宏定义中,就有具体消息和此函数的映射定义(可以是自定义,也可以是系统自动完成的)如定义一个Edit的Change处理函数:一、在类的头文件(*.h)中增加 : //{{AFX_MSG(CDialogDemo) afx_msg原创 2021-05-25 15:14:51 · 363 阅读 · 2 评论 -
C++ Eigen类
http://eigen.tuxfamily.org/dox/classEigen_1_1Matrix.htmlEigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols >_Scalar Numeric type, e.g. float, double, int or std::complex<float>. User defined scalar types are supported as well原创 2021-04-29 21:06:42 · 122 阅读 · 0 评论 -
黑马C++关键点总结
char a[10] = {“hello”}; a++;这里就会报错,因为a是char[]类型的,它表示的是这个数组的首地址和第一个元素的地址,不能直接去操作a++去移动地址,如果想移动可以char *p = a;然后再操作p,p++这样是完全正确的。...原创 2021-03-04 12:30:37 · 239 阅读 · 2 评论 -
#pragma 预处理指令详解
传送原文在所有的预处理指令中,#pragma 指令可能是最复杂的了,它的作用是 设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。 其格式一般为: #pragma para ; 其中para为参数,下面来看一些常用的参数。 (1) #pragma comment(…)该指令将一个注释记录放入一个对象文件转载 2021-02-26 14:41:29 · 290 阅读 · 0 评论 -
__stdcall,__cdecl,__pascal,__fastcall的区别
__cdecl__cdecl 是 C Declaration 的缩写,表示 C 语言默认的函数调用方法:所有参数从右到左依次入栈,这些参数由调用者清除,称为手动清栈。被调用函数不会要求调用者传递多少参数,调用者传递过多或者过少的参数,甚至完全不同的参数都不会产生编译阶段的错误。__stdcall__stdcall 是 Standard Call 的缩写,是 C++ 的标准调用方式:所有参数从右到左依次入栈,如果是调用类成员的话,最后一个入栈的是 this 指针。这些堆栈中的参数由被调用的函数在返回后原创 2021-02-25 22:39:30 · 210 阅读 · 0 评论 -
C++ Typedef
原文传送在阅读代码经常会遇到一些复杂的声明和定义,例如: (1) void * (* (*fp1) (int)) [10]; (2) float (* (*fp2) (int, int, float)) (int); (3) typedef double (* (* (*fp3) ()) [10]) (); fp3 a; (4) int (* (*fp4()) [10]) ();刚看到这些声明或者定义时,一些初学者甚至有一定经验的工转载 2021-02-25 15:43:09 · 211 阅读 · 0 评论 -
static_cast ,reinterpret_cast强制类型转换
https://blog.csdn.net/u014450222/article/details/81428336static_cast < type-id > ( expression )该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法:① 用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换。进行上行转换(把派生类的指针或引用转换成基类表示)是安全的;进行下行转换(把基类指针或引用转换成派生类表示)时,转载 2021-02-24 13:43:07 · 207 阅读 · 0 评论