
c++语法
文章平均质量分 71
Scikit-learn
无畏现状改变,敢为结果冒险!
一名深耕计算机科学与技术领域多年的专业人士,对编程充满无限热情,致力于将技术转化为实际解决方案!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++经典150题
时间复杂度为 O((m+n)log(m+n)) (快速排序–对数级时间复杂度)返回你可以从这笔交易中获取的最大利润。你不需要考虑数组中超出新长度后面的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。,返回其中的多数元素。设计一个算法来计算你所能获取的最大利润。数组中的每个元素代表你在该位置可以跳跃的最大长度。** 删除重复出现的元素,使得出现次数超过两次的元素。并在使用 O(1) 额外空间的条件下完成。不要使用额外的数组空间,你必须仅使用。** 删除重复出现的元素,使每个元素。原创 2024-06-11 13:00:00 · 4197 阅读 · 0 评论 -
C++笔试-剑指offer
每当要pop的时候就获取stack2的最上面的元素,如果stack2为空,则将stack1依次出栈到stack2。这样stack2上面的就是最先push进去的元素,最底下是最新push进去的元素。和二叉树的(最大)深度的区别是,计算的是到叶子节点(左右孩子都为空)的最小深度,也用后序遍历实现。右指针指向左指针后k个元素,这样当右指针为最后一个节点后的元素时,左指针指向的就是所求元素。用不同数字相互抵消的方法,最后留下来的一定是超过一半的数字。由于这题是升序,可以直接用步长判断,也可以用上题的步骤判断。原创 2024-06-10 10:45:00 · 1319 阅读 · 0 评论 -
数据结构基础(基于c++)
Hello 算法 (hello-algo.com)原创 2024-06-11 10:00:00 · 938 阅读 · 0 评论 -
图论--无向无权图
无权图:所有边的权重都是一样的,都等于1。权重的物理意义:可以是距离、长度、宽度等。不存在的边可以是权重无穷大、权重为0的边。有权图:边有权重,权重的大小各不相同。路径:可以表示为结点的序列或边的序列。有权图路径的长度 = 路径边权重总和。简单路径的概念:路径上没有重复结点。路径不存在:路径的长度为正无穷。无权图路径的长度 = 路径边数。一条边对应邻接矩阵的一个元素。一条边对应邻接矩阵的一个元素。点的表示:v,点的集合:V。边的表示:e,边的集合:E。图是由很多结点和边组成的。原创 2024-06-10 10:45:00 · 811 阅读 · 0 评论 -
数据结构笔记
顺序表:用顺序存储的方式实现线性表顺序存储。malloc:malloc函数申请一整片连续的存储空间,返回一个指针,需要强制转型为你定义的数据元素类型指针例 : L.data = (ElemType*) malloc (sizeof(ElemType) * InitSize);顺序表存满时,可再用malloc动态拓展顺序表的最大容量,将数据元素复制到新的存储区域,并用free函数释放原区域顺序表的特点:随机访问;存储密度高;拓展容量不方便;插入、删除操作不方便,需要移动大量元素。原创 2024-06-09 18:30:00 · 933 阅读 · 0 评论 -
堆和优先级队列
堆必须是一个完全二叉树大根堆:父节点元素都大于子节点元素小根堆:父节点元素都小于子节点元素完全二叉树的下标规律:若父节点下表为i,则左子节点下标为2i+1,右子节点下表为2i+2。原创 2024-06-09 11:30:00 · 194 阅读 · 0 评论 -
C++面试经验分享
std::shared_ptr在内部维护一个引用计数,其只有两个指针成员,一个指针是所管理的数据的地址;智能指针在 C++ 中是一种用于自动化资源管理的类模板,主要是用来管理动态分配(堆分配)的内存,以避免内存泄漏和其他与资源管理相关的错误。智能指针在 C++ 中是一种用于自动化资源管理的类模板,主要是用来管理动态分配(堆分配)的内存,以避免内存泄漏和其他与资源管理相关的错误。智能指针的这些实现原理主要是通过类模板和运算符重载实现的。时,它会接管一个原始指针,并负责该指针指向的对象的生命周期。原创 2024-06-05 23:31:38 · 1397 阅读 · 0 评论 -
3万字数据结构与算法学习笔记+知识点总结
假设含有n个记录的序列为{r1,r2,…,rn},其相应的关键字分别是{k1,k2,…,kn},需要确定1,2,…,n的一种排列p1,p2,…,pn,使其相应的关键字满足kp1原创 2024-01-12 14:00:00 · 1092 阅读 · 0 评论 -
编程语言--C/C++、python
TODOTODO。原创 2024-01-08 22:25:23 · 1220 阅读 · 0 评论 -
C语言跟内存分配方式
【代码】C语言跟内存分配方式。原创 2023-10-03 10:45:00 · 233 阅读 · 0 评论 -
链表单向链表跳跃链表
t数组的局限:编译期就需要知道大小;内存连续,插入困难。原创 2023-10-03 10:30:00 · 179 阅读 · 0 评论 -
c++类构造函数、拷贝函数 、 赋值函数、析构函数
class privateCopy{// class 默认为 private 普通用户无法访问// 私有拷贝构造函数// 私有拷贝赋值运算符public:// 默认合成 默认构造函数// 默认合成 默认析构函数 不能是删除函数char* name;//名字 字符指针int age;// 年龄Node(char* n = " ", int a = 0 ){//默认构造函数// strdup()字符串拷贝库函数age = a;// 拷贝构造函数。原创 2023-10-02 14:00:00 · 317 阅读 · 0 评论 -
cout格式化输入输出
cout原创 2023-10-01 12:00:00 · 479 阅读 · 0 评论 -
编程面试_字符串
针对长度为n的字符串来说,假设需要移动m个字符到字符串的尾部,对每个字符需要进行移动n次,那么总共需要 mn 次操作,同时设立一个变量保存第一个字符,如此,时间复杂度为O(m n),空间复杂度为O(1),空间复杂度符合题目要求,但时间复杂度不符合,所以,我们得需要寻找其他更好的办法来降低时间复杂度。遍历短字符串,判断乘积f 能否被短字符串中的字符对应的素数整除,如果整除则包含该字符,如果不能整除则这个字符不包含。例如以一段回文串“aba”为例,以b为中心,它的前缀和后缀都是相同的,都是a。原创 2023-10-01 09:00:00 · 237 阅读 · 0 评论 -
编程面试_数组
如 分治法(通过分而治之,然后归并);以及 空间换时间(如活用哈希表)。此外,选择合适的 数据结构 可以显著提升效率,如寻找最小的k个数中,用 堆 代替 数组,也可借鉴快排思想,中枢分区方法。再有,如果题目允许排序,则可以考虑 排序。寻找和为定值的两个数中,先排序,然后用 前后两个指针 往中间扫描。我们可以考虑 不改变数列顺序的 贪心算法(如 最小生成树Prim、Kruskal 及 最短路dijkstra)原创 2023-09-30 14:30:00 · 197 阅读 · 0 评论 -
编程面试_动态规划
如果用f(M)表示:从起点S到终点E(经过M点)的距离,那他就可以表示成为两段距离之和,M为中间策略点。解决 赋权的有向图 或者 无向图的 单源最短路径问题,算法最终得到一个最短路径树。//图的顶点个数 v1,v2,…int **arc;//邻接矩阵 二维数组 指针的指针。#include"Dijkstra.h"// 包含声明 头文件。Dis * dis;//记录各个顶点最短路径的信息。// Dijkstra.cpp 源文件的代码。private:// 私有变量。// 自定义类的声明。原创 2023-09-30 12:45:00 · 147 阅读 · 0 评论 -
编程面试_动态规划
如果用f(M)表示:从起点S到终点E(经过M点)的距离,那他就可以表示成为两段距离之和,M为中间策略点。解决 赋权的有向图 或者 无向图的 单源最短路径问题,算法最终得到一个最短路径树。//图的顶点个数 v1,v2,…int **arc;//邻接矩阵 二维数组 指针的指针。#include"Dijkstra.h"// 包含声明 头文件。Dis * dis;//记录各个顶点最短路径的信息。// Dijkstra.cpp 源文件的代码。private:// 私有变量。// 自定义类的声明。原创 2023-09-29 13:00:00 · 152 阅读 · 0 评论 -
vector向量类使用
public:// 默认构造函数// 复制字符串age = a;//复制年龄// 默认析构函数~Person(){free(name);//释放 字符串指向的空间// 重载 等号判断 运算符 返回布尔量 输入为常量 的引用 避免拷贝 同时 常量 避免修改// 名字 和年龄都必须相等// 重载 小于号 运算符 返回布尔量//这里 使用 名字字符串 来比较// 重载 大于号 运算符 返回布尔量return!// 使用了 == 和 小于号private:// 私有变量。原创 2023-09-29 20:00:00 · 202 阅读 · 0 评论 -
Numerical Calculation 数值计算
数值计算第一次实验(C语言版)原创 2023-08-30 20:30:00 · 187 阅读 · 0 评论 -
cpp程序优化
并行优化是代码优化的基本方法,从大到小一共可以分成三级:异步框架;任务并行;数据并行。在实际工作中,第一步一般是先设计 异步框架,包括 异步处理任务 以及 异步任务 的 异构化 等;第二步一般是做 数据并行优化(SIMD),利用CPU的 向量指令 来对 多条数据并行处理;这两步是 代码 优化的重心,一般做完这两步,系统性能会有明显的提升。今天要讨论的是第三步,for循环的并行优化。与前两者不同的是,for循环往往是处理同一类任务,且通常会涉及到对同一个变量的读写,原创 2023-08-15 09:00:00 · 339 阅读 · 0 评论 -
学习C++资料集合
C++为类中提供类成员的初始化列表类对象的构造顺序是这样的:1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员2.进入构造函数后在构造函数中执行一般计算规则:1.类里面的任何成员变量在定义时是不能初始化的。2.一般的数据成员可以在构造函数中初始化。3.const数据成员必须在构造函数的初始化列表中初始化。4.static要在类的定义外面初始化。5.数组成员是不能在初始化列表里初始化的。6.不能给数组指定明显的初始化。这6条一起,说明了一个问题:C++里面是不能定义常量数组的。原创 2023-08-14 18:30:00 · 212 阅读 · 0 评论 -
Design-Pattern设计模式
泛化关系(generalization)聚合关系(aggregation)组合关系(composition)关联关系(association)依赖关系(dependency)实现关系(realize)原创 2023-08-14 12:00:00 · 127 阅读 · 0 评论 -
cpp手册
输入输出数字缩短代码技术 Shortening codeforint;原创 2023-08-13 10:00:00 · 282 阅读 · 0 评论 -
c++11新特性
std::weak_ptr网上很多人说其实是为了解决std::shared_ptr在相互引用的情况下出现的问题而存在的.除此之外,std::unordered_set在插入时不会自动排序,这都是std::set表现不同的地方。在内存管理方面,C++11的std::auto_ptr基础上,移植了boost库中的智能指针的部分实现,如std::shared_ptr、std::weak_ptr等,当然,想boost::thread一样,std::unordered_set的数据存储结构也是哈希表的方式结构,原创 2023-08-13 06:30:00 · 199 阅读 · 0 评论 -
BoostCPP学习
Boost C++ 库 是一组基于C++标准的现代库。要增强C++项目的生产力,除了C++标准以外,Boost C++ 库是一个不错的选择。由于当前版本的C++标准在2003年修订之后,C++又有了新的发展,所以 Boost C++ 库提供了许多新的特性。由于有了 Boost C++ 库,我们无需等待下一个版本的C++标准,就可以立即享用C++演化中取得的最新进展。Boost C++ 库具有良好的声誉,这基于它们的使用已被证实是非常有价值的。原创 2023-08-12 08:00:00 · 322 阅读 · 0 评论 -
c语言编程总结
编号200-299是PC-Lint程序内部的错误,这类错误不会出现在代码中的;编号400-999中出现的提示信息,是根据隐藏代码问题的可能性进行分类的:其中编号400-699指的是被检查代码中很可能存在问题而产生的告警信息;[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iv3f8uhk-1691285512730)(https://github.com/Ewenwan/ShiYanLou/blob/master/learn_c/img/pointer_array.PNG)]原创 2023-08-11 17:00:00 · 250 阅读 · 0 评论 -
doxygen安装与使用
Output和Diagrams也没什么好动的。原创 2023-08-08 07:45:00 · 663 阅读 · 0 评论 -
数据结构--线性结构-线性表
数据结构中的逻辑结构分为线性结构和非线性结构,线性结构是n个数据元素的有序(次序)集合,它有下列几个特征:1.集合中必存在唯一的一个"第一个元素";2.集合中必存在唯一的一个"最后的元素";3.除最后元素之外,其它数据元素均有唯一的"后继";4.除第一元素之外,其它数据元素均有唯一的"前驱"线性结构中线性表,它是最常用且最简单的一种数据结构。线性表是一个含有n≥0个结点的有限序列,对于其中的结点,有且仅有一个开始结点没有前驱但有一个后继结点,有且仅有一个终端结点没有后继但有一个前驱结点,原创 2023-08-07 20:45:00 · 252 阅读 · 0 评论 -
自动化单元测试
桩,或称桩代码,是指用来代替关联代码或者未实现代码的代码。如果函数func用func_stub来代替,那么,func称为原函数,func_stub称为桩函数。打桩就是编写或生成桩代码的过程。原创 2023-08-05 09:00:00 · 257 阅读 · 0 评论 -
整数线性规划求解工具isl使用方法
1.isl_ctx对象的创建(初始化):整数集和关系的所有操作都在的上下文中发生isl_ctx。给定isl_ctx只能在单个线程中使用。一个函数的所有参数都必须在同一上下文中分配。当前没有功能可用于将对象从一个移动isl_ctx到另一个isl_ctx。这意味着当前无法安全地将对象从一个线程移动到另一个线程,除非整个线程isl_ctx都移动了。一个isl_ctx可以使用分配isl_ctx_alloc和使用中解脱出来isl_ctx_free。在isl_ctx释放之前,应释放内分配的所有对象isl_ctx。原创 2023-08-04 21:30:00 · 569 阅读 · 0 评论 -
性能分析工具
【代码】性能分析工具。原创 2023-08-03 11:45:00 · 182 阅读 · 0 评论 -
词法分析器
在早期编译1.0时代,我们的目标是完成程序语言到机器语言的翻译,所以重点在编译器前端,于是我们花费大量时间研究词法分析、语法分析、语义分析等内容。如今的本科编译原理课程,基本上也就到这一层面吧。在编译2.0时代,我们的目标变了,我们的重点在于生成高效的代码。于是,我们的重点在编译器中端和后端,我们研究循环优化,研究指令调度,研究目标平台优化等内容。如今的研究生高级编译原理教程,会涉及到这一层面。原创 2023-08-04 08:00:00 · 312 阅读 · 0 评论 -
Wings与c++test自动单元测试
Wings:json文件生成不定长度的数组,驱动运行的时候可以根据文件中用户设定的数组进行灵活的取值,二级指针也可以根据json中数组的长度进行灵活的赋值,三级指针暂时是取的二级指针的地址。二级指针三级指针类似,取一级指针,二级指针的地址。Wings:对结构体的处理相对比较合理,首先针对复杂类型,wings首先进行展开分析,将复杂类型分解为最简单的基本类型,然后依次进行赋值操。Wings首先给不定长度的数组,分配一定的长度,用户可修改数组长度的大小wings将依据具体修改的数组长度进行赋值。原创 2023-08-03 08:00:00 · 249 阅读 · 0 评论 -
VactorCast自动化单元测试
传统的开发模式(比如:瀑布式开发、V模式开发、较小程度的敏捷开发)由不同阶段组成。最先进行持续集成工作的应该是编码阶段,在该阶段,开发人员根据分派给自己的任务来编写代码。随着开发的不断进行,开发人员很可能要对存储库进行修改,但是他们只是更新自己开发的代码,不会同时更新其它开发人员的修改。所以,在所有的代码都开发完成之后,会有一个特别的集成阶段,将所有开发人员对代码所作的修改进行整合,以形成一个可测试的软件构建。原创 2023-08-02 20:00:00 · 1559 阅读 · 0 评论 -
LLVM源码分析
Module类表示LLVM程序中的顶层结构。一个LLVM Module实际上要么是原始程序的一个翻译单元,要么是链接器合并的几个翻译单元的一个组合。Module 模块包含 Functions列表 + GlobalVariables全局变量列 + SymbolTable符号表1.一个Functions列表返回Function列表。当您需要更新列表或执行没有转发方法的复杂操作时,这是必需的。2.一个GlobalVariables全局变量列表。原创 2023-08-01 16:00:00 · 1825 阅读 · 0 评论 -
Halide_images_tensors_编译器
Halide是用C++作为宿主语言的一个图像处理相关的DSL(Domain Specified Language)语言,全称领域专用语言。主要的作用为在软硬层面上(与算法本身的设计无关)实现对算法的底层加速,我们有必要对其有一定的了解。因为不论是 传统的图像处理方法亦或是深度学习应用 都使用到了halide的思想。其中,在OpenCV(传统图像处理库)中部分算法使用了Halide后端,而TVM(神经网络编译器)也是用了Halide的思想去优化神经网络算子。原创 2023-08-01 08:00:00 · 140 阅读 · 0 评论 -
LLVM框架系统
LLVM是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time),对开发者保持开放,并兼容已有脚本。原创 2023-07-31 21:55:08 · 473 阅读 · 0 评论 -
code_profiling_代码剖析
和gprof类似的分析工具,但它对程序的运行观察更是入微,能给我们提供更多的信息。和 gprof不同,它不需要在编译源代码时附加特殊选项,但加上调试选项是推荐的。Callgrind收集程序运行时的一些数据,建立函数调用关系图, 还可以有选择地进行cache模拟。在运行结束时,它会把分析数据写入一个文件。callgrind_annotate可以把这个文件的内容转化成可读的 形式。valgrind不是linux的原生工具,需要自行安装。原创 2023-07-31 21:54:00 · 268 阅读 · 0 评论 -
Clang静态分析
LLVM是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time),对开发者保持开放,并兼容已有脚本。原创 2023-07-29 13:30:00 · 573 阅读 · 0 评论 -
code_profiling_代码剖析
和gprof类似的分析工具,但它对程序的运行观察更是入微,能给我们提供更多的信息。和 gprof不同,它不需要在编译源代码时附加特殊选项,但加上调试选项是推荐的。Callgrind收集程序运行时的一些数据,建立函数调用关系图, 还可以有选择地进行cache模拟。在运行结束时,它会把分析数据写入一个文件。callgrind_annotate可以把这个文件的内容转化成可读的 形式。valgrind不是linux的原生工具,需要自行安装。原创 2023-07-29 10:15:00 · 189 阅读 · 0 评论