![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
文章平均质量分 75
lp_oreo
hahh
展开
-
学习链接记录
在学习的过程中遇到了很有优秀的学习资料(包括博客以及视频等等),因此在这里记录一些自己觉得不错的学习链接。1. 操作系统 视频链接:南京大学2022操作系统-蒋炎岩 博主主页:操作系统:设计与实现 (2022 春季学期)2. 线性代数 知乎:1. MIT线性代数---方程组的几何解释 - 知乎 博客园:线性代数 - 随笔分类 - 我是8位的 - 博客园3. 源码分析 面圈网:C/C++ 日志库源码-C...原创 2022-05-15 16:13:55 · 547 阅读 · 0 评论 -
C++ Primer - 四种数据类型转换区别
在C++ Primer中详细介绍了static_cast,dynamic_cast,const_cast和reinterpret_cast四种数据类型转换的方法,因此在此进行小结一下。1. static_cast在编写程序的时候,一般所有明确的类型转换都可以使用static_cast,而不提供运行时的检查,因此称之为static。所以需要程序员在编写程序的时候就需要确认数据类型转换的安全性。static_cast主要在以下三种场合使用:1.1 基本数据类型的转...转载 2022-05-13 09:26:19 · 242 阅读 · 0 评论 -
C++遇到的bug总结
1. error: passing ‘const xxx’ as ‘this’ argument discards qualifiers [-fpermissive]分析:const修饰实例对象调用了非const修饰的成员方法。解决方案:将对象变为非const的,或者使用const修饰成员方法2.error: 'xxx' does not name a type 在复现《C++ Primer》书中的Text Queries源码时,由于多个头文件...原创 2022-05-12 13:02:06 · 2701 阅读 · 0 评论 -
C++ Primer - TextQuery设计
在C++ Primer书中设计了TextQuery的程序,该程序可以实现从本地加载文章,并记录每个单词位于第几行。当用户输入单词,程序就可以返回所有的包含该单词的一行文字。实验结果如下图所示:因此,我们可以简单分析一下,对于TextQuery类而言,它涉及到哪些数据结构?(1)需要打印某一行的文字,因此我们可以使用vector将每一行的文字都进行保存。(2)当用户输入某个单词时,程序就会打印包含该单词的所有行。因此,就涉及到map数据结果。键是单词,而值则是该...原创 2022-05-10 21:09:23 · 540 阅读 · 0 评论 -
C和指针-作用域、链接属性以及存储类型
之前对作用域、链接属性以及存储类型这三个概念总是弄混,今天在C和指针上看到了其对着三个定义的解释觉得很受启发,因此就在这里记录一下,方面日后自己进行复习。1. 作用域 当变量在程序中的某个部分被声明之后,它只在程序中的某个区域内可用(作用域其实就是指变量的可用域)。比如,在函数中定义的局部变量就只能在该函数中使用,一旦出了这个函数的就无法进行使用了。目前,主要有代码块作用域、函数作用域、文件作用域以及原型作用域四种。#include <iostream>...原创 2022-05-02 17:18:43 · 563 阅读 · 0 评论 -
VSCode使用总结
1. VSCode配置C++环境(1)配置c_cpp_properties.json文件{ "configurations": [ { "name": "Win32", "includePath": [ "${workspaceFolder}/**" ], "defines": [ "_DEBUG",原创 2022-04-18 16:26:20 · 340 阅读 · 0 评论 -
图论相关知识
这一部分主要复习一下最近学习的图论方面的知识,主要包括以下几个方面(1)图的表示:稀疏图 —— 邻接表;稠密图 —— 邻接矩阵(2)图的遍历:深度优先遍历(可以得到一个图中的连通分量的个数)和广度优先遍历(可以得到无权图的最短路径)(3)最小生成树:Prim算法和Kruskal算法(无权图)(4)最短路径:Dijkstra算法(针对带权图,但是不能包含负权图)和Bellman-Ford算法(针对带负权的图,但不能包含负权环)1 图的表示根据图中边的个数可以分为稠密图和稀疏图。..原创 2020-10-09 22:05:09 · 404 阅读 · 0 评论 -
并查集相关知识点
并查集是这样的使用数据结构:它可以检测两个节点之间的连通状态。比如下图一个网络中有两堆节点,如何快速准确的判断某两个节点之间的连通性、或者改变某个节点的连通状态,这是并查集需要考虑的问题归纳来说,一个并查集所涉及到的方法有下面两个:(1)union(p, q) --> 合并两个集合(“并”)合并两个集合(“并”)(2)find(p) --> 判断两个元素是否属于同一个集合1 quick find方法显而易见,我们可以创建一个status数组,status数组保存着每个节点原创 2020-10-04 15:25:02 · 223 阅读 · 0 评论 -
二分搜索法和二叉搜索树
1二分搜索法二分搜索法是一个很常用的搜索方法,但是它要求数组必须是一个有序的数组,不然二分搜索就失去了意义。二分搜索是说我们将整个数组分成左右两个部分,让中间的数据和targe进行比较,如果target > arr[mid]表示target在右半区域;如果target <arr[mid],说明target在左半区域;如果target == arr[mid]说明找到了,返回mide就行。二分搜索法可以用递归方法和循环方法实现,它们的逻辑都是相同的:如果不在该区域,就根据mid调整...原创 2020-10-03 15:07:51 · 1001 阅读 · 0 评论 -
最大堆和最大索引堆
最大堆是一种常用的数据结构,它可以快速的得到堆中最大的元素,比如在计算机执行多线程的是够,我们可以快速得到优先级最大的进行并对其优先执行,并且可以对剩余的线程快速进行排序,堆顶的元素又是优先级最大的那个子线程。依靠最大堆的这个特性,我们可以动态的调整线程的优先级并且快速索引到优先级最高的子线程。作为一个数据结构,其基本的操作莫过于添加元素和删除元素了。在向堆中添加元素的同时需要进行shift up操作,将该元素放到合适的位置上;当删除元素的时候,我们首先将堆顶元素保存在item中,然后将堆顶元素用堆尾元原创 2020-09-30 19:07:40 · 236 阅读 · 0 评论 -
常见的排序算法及其代码实现(C++)
最近学习了几种常见的排序算法,再回过头梳理这些算法的时候,发现某些排序算法虽然思想不同,但是有着很多相似的特点。因此,在此对其进行整理和梳理。本文的排序算法按照时间复杂度分为O(n2)以及O(nlog(n))级别的排序算法,如下述表格所示,下面会针对每个算法进行简单的介绍。 O(n2) O(nlog(n)) 冒泡排序 归并排序 选择排序 快速排序 插入排序原创 2020-09-29 14:23:04 · 933 阅读 · 0 评论 -
对KMP算法的next数组的理解
最近正在看《大话数据结构》,在看到KMP算法的时候怎么进行字符串匹配的基本上可以理解,但是在看源码求解next数组的时候,我蒙了,一头雾水,和我想象的完全不一样,真的好简洁,简洁到我都不知道为什么会这样写,我试图探究所以然,然后研究了将近两天,因此在这仅仅说明我对next数组的理解。理解错误的还请大佬指正,也欢迎交流,共同分享一下各自的想法。KMP算法主要是用于解决字符串匹配的问题,算法的前世今生我就不说了,别的博客都有涉及到,而且不是今天文章的重点。KMP算法的基本思想就是“仅仅移动模式串,比较指针不原创 2020-09-24 16:16:40 · 251 阅读 · 0 评论 -
线性表的链式存储结构
最近正在看《大话数据结构》,书中给出的线性表的链式存储结构是以C语言的形式给出的,但是我最近正在学习C++,因此自己重新写出了C++版本的线性表的数据结构。下面介绍实现的要点:(1) 结点中通常分为数据域和指针域,因此在LInkList类中定义了Node结构体,并使用head和tail指针指向链表的首部和尾部,并使用count记录链表中有多少结点。(2) 构造函数中要初始化head,tail和count;(3) 插入数据。插入数据主要分为两种,默认是在尾部添加元素,另一种情况是在指定索引位置原创 2020-09-19 16:23:02 · 193 阅读 · 0 评论 -
c++中常用的容器
最近在学习数据结构和算法,遇到了一些容器,对容器的使用还不太了解,所以想在学习的过程中,把自己使用到的容器的用法记录下来。1 vector一个容器常常需要涉及到对容器中数据的增,删,改,查操作,在vector中涉及到的函数有:(1)增push_back()函数:对vector的队尾添加一个元素vector<int> data;// 在队尾添加整型元素3data.push_back(3);insert()函数:在vector的某个位置添加一个元素vector&l原创 2020-06-30 10:39:16 · 546 阅读 · 0 评论