自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 最长公共前后缀

2021-10-12 15:10:26 200

原创 else 悬挂--C语言陷阱

今天遇到一个很奇怪的问题, 下面的代码我觉得会什么都不输出,但不幸的是却输出了x。经过分析我觉得可能编译器在编译的时候,自动给缩进了,应该不会是别的原因。 if( 1 < 2) if(3 <2) cout << "ok" << endl; else cout << "x" << endl;...

2021-07-17 16:48:58 137

原创 编译器优化可能会导致多线程并发出错?

固定缓冲区大小的生产者消费者模型在MSVC2019版本下,x64 release模式下,有几率在生产者生产完数据后卡死,经过VS2019性能检测工具,发现在consumer函数中不断进行两个判断,具体问题还不知道。// 生产者消费者模型// 一个线程向队列中写数据, 另一个线程从队列中取数据#include <thread>#include <mutex>#include <iostream>#include <deque>#include

2021-07-15 21:16:33 213

原创 C++ STL list

STL中list为双向链表结构, 可以实现O(1)的插入删除操作, 但是无法随机存取.首先需要明确的是, list是一个双向循环链表, 链表中存在迭代器为end()的节点, 如下图所示.distance(iter a, iter b) 可以计算两个迭代器之间的距离, 当模板类型为可随机存取类型, 如vector等, 计算方法为迭代器的减操作符;当模板类型为不可随机存取类型时, 如list, 计算方法为使 a 不断自增, 知道等于b, 返回自增的次数. cppreference 描述为:If it

2021-07-06 11:13:00 94

原创 C++ 标注IO iostream

C++ iostream 中定义了标注输入与输出, 在内部 cin 是一个istream对象, cout、cerr、clog是ostream对象,但是可以注意到 cerr与clog功能描述是一致的,都可以链接到标准错误,但是一个是非缓冲的,另一个是缓冲的。这里的缓冲与非缓冲指的是屏幕对于输出是否立即刷新,cerr会立即刷新,而clog则不会。...

2021-06-30 15:26:20 68

原创 C语言数组与指针

总结一下C语言中的数组与指针首先先弄明白数组指针与指针数组指针数组指的是一个元素为指针的数组,数组指针指的是指向数组的指针。 // 普通数组 int a[] = {1, 2, 3, 4, 5}; // 指针数组 int* p[5]; // 数组指针 int (*p)[5] = &a;区分一下数组名与数组名取地址输出内容相同是因为两个指针存放内容均为数组第一个元素的地址,但是两个指针指向类型不同,因此拥有不同的偏移量。 int a[] = {1, 2, 3, 4};

2021-06-17 15:22:38 166

原创 STL- strict weak ordering

今天运行程序突然崩溃, debug也无法定位到具体出错位置, 看了一眼崩溃信息expression invalid comparator, 顾名思义,可能是排序出错了。经过百度发现, std::sort的排序需要满足strict weak ordering, 即cmp(a, b) != cmp(b, a)经过阅读自定义的比较函数发现, 比较函数定义如下bool cmp(a, b){ return a-b;}如果a与b相等, 那么cmp(a, b)与cmp(b, a)的结果是一样的, 换句话说

2021-04-13 10:33:21 119

原创 vector erase和remove辨析

这里写自定义目录标题std::remove 位于 \std::remove 位于 <algorithm>std::vector::erase位于<vector>两者字面意思都是删除(清除),但是实际操作上却有很大的差别。iterator erase (const_iterator position):删除指定迭代器位置的元素,返回删除位置后一个位置的迭代器。iterator erase (const_iterator first, const_iterator last):

2021-04-06 22:18:03 396

原创 python中容易忽视的一个问题

写python时,经常犯一个错误,这里介绍一下例子如下a = list()b = [1, 2]a.append(b)print(a)b[0] = 0print(a)两次输出的结果分别为 [[1, 2]] 与 [[0, 2]],这一点在写循环中,经常忽略。深层次的问题应该是与python的内存模型有关,由于还没有深入研究,所以先挖个坑。不过有一点可以明确的是,对list的元素修改并不会修改list的内存地址,因此会导致a中的元素也发生变化。python内置的id函数实际上输出的就是

2021-03-17 14:28:36 60

原创 关于unbuntu的环境变量

事情的经过之前在服务器上配置cuda的时候是按照博客上一步步来的,最终在自己的用户空间成功配置了环境变量,但是这两天乱用rm -rf最终把cuda的一个文件夹删掉了,好在服务器上本来就预装了一个,我只需要再把环境变量配置一下就好了。环境变量的配置方法使用export命令// 列出所有环境变量export -p// 删除某个环境变量,xxx为环境变量的名字export -n xxxexport的所有命令仅限于本次login,一旦logout,本次的增加删除环境变量的操作都会失效。使用

2021-03-06 20:43:22 115

转载 C语言参数压栈顺序例子

转载自春夜喜雨 http://blog.csdn.net/chunyexiyu#include <stdio.h>int main(){ int arr[] = {1,2,3,4}; int* ptr = arr; printf("%d,%d", *ptr, *(++ptr)); return 0;}输出结果为 2,2原因是函数的参数入栈顺序为自右向左,因此先入栈*(++ptr),再入栈 *ptr。...

2021-03-06 19:29:02 162 1

原创 爬楼梯算法与斐波那契数列

文章目录爬楼梯算法引发的思考爬楼梯算法引发的思考爬楼梯算法应该是大家都比较熟悉的算法,计算方法与斐波那契数列的计算方式类似(递归循环均可),具体不再赘述。爬楼梯原始问题中,每次可以爬一级台阶与两级台阶。但是若改为每次可以爬一、二或三级台阶时,该如何计算呢。先说结论,计算方法与斐波那契数列类似,若每次可以爬1,2…,k级台阶,则通项为F(k+a)=F(a)+F(a+1)+...+F(k+a−1)F(k+a)=F(a)+F(a+1)+...+F(k+a-1)F(k+a)=F(a)+F(a+1)+.

2021-02-27 23:19:20 656

原创 Dijkstra算法时间复杂度分析

文章目录Dijkstra算法的思路与关键点Dijkstra算法的时间复杂度之前一直默认Dijkstra算法时间复杂度为 o(n2)o(n^{2})o(n2),没有思考过具体的时间复杂度,今天把这个弄清楚。Dijkstra算法的思路与关键点思路:广度优先 + 松弛所有点分为两个集合SSS和TTT,SSS最开始只包括源点sss,剩余点都位于TTT。SSS集合表示已经计算出最短路径的点集合,TTT表示尚未计算出最短路径的点集合。每次从集合TTT中选出一个与集合SSS距离最短的点vvv,将点vvv加

2021-02-24 21:37:33 44402 11

原创 最大流--最小割(附C++实现)

文章目录最大流 最小割问题方法,BFS/DFS + 构造反向图,直到得到最小S-T割(即不存在从S割到T割的有向边)最大流 最小割问题问题定义:有向图中,某一点流向另外一点的最大流量,有向边的权值表示通过这条边的最大流量最大流问题其实属于一种优化问题,类似的如最短路径也是属于一种优化问题具体可参考B站 理解最大流/最小割定理(蒋炎岩)最后得出的推论–也是解决本问题的方法我的总结:将有向边的流量大小理解为节点之间的路径个数(平行边),最大流问题,即为找出起点与终点之间路径的个数。方法,

2021-02-13 21:10:25 761

原创 C语言-高\低地址 高\低字节 大小端序 大小端序数据转换

文章目录本篇文章分为四个部分高低地址高低字节大小端序大小端序数据转换本篇文章分为四个部分高低地址计算机按照字节寻址,每一个地址指向内存中的一个字节。在下图中,每一个色块表示内存中的一个字节,箭头处表明了其在内存中的地址。图中地址位32位,说明为32位机器。0x00000000位低地址,0x00000002相对为高地址。高低字节高低字节与内存中的位置无关,描述的是数据中字节的权。例如int i = 0x00000a0b;0a 这个字节为高字节,0b这个字节为低字节,原因是0a所处的位置权较

2021-02-10 16:18:53 2032

原创 C语言-指针存储空间大小

如果提到C语言指针大小,估计大家都会说是4个字节,但是是否真的如此呢?int* pa = NULL;printf("%d\n", sizeof(pa));在我的机器上的输出结果为8(字节),为什么不是4呢实际上指针的存储空间大小与计算机的字长有关(32位或64位)计算机字长:计算机一次所能处理的数据的最大长度。指针:指针的实际上存储的是地址因此32位机器的指针长度应为32位(4字节),64位机器的指针长度应为64位(8字节)...

2021-02-09 14:07:42 2083 5

原创 C语言-纯c实现泛型栈

Stack.h//// Created by Administrator on 2021-2-8.// 自定义泛型栈//#ifndef GLOB_TEST_STACK_H#define GLOB_TEST_STACK_Htypedef struct{ // 空间大小 int _capacity; // 元素个数 int _size; // 元素大小 int _element_size; // 模拟栈的数组 void* elem

2021-02-09 01:46:00 245

原创 C语言-内存对齐

这里写自定义目录标题c语言结构体的内存对齐结构体定义typedef struct{ int _capacity; int _size; int _element_size; void* element_arr;}Stack;sizeof输出大小,大小为24(64位机器)print("%d\n", sizeof(Stack))int 类型大小为4(字节), void*(空类型指针)大小为8(指针的存储大小再另一篇博客中细说), 简单相加结果为22,但为什么是24呢?

2021-02-09 01:44:35 94 1

原创 C语言中的void*

void*void* 是无类型指针,无类型指针无法完成解引用与算术运算(因为不知道到底指向什么类型)作为函数的参数时,可以接受任意类型的指针void fun(void* p){ //}// 调用方式int i;short s;double d;fun(&i);fun(&s);fun(&d);...

2021-02-04 14:40:46 161

原创 C语言-纯C实现的泛型函数

c++中的泛型算法实现借助了模板,在c语言中也可以实现类似功能算法示例 swap 交换两个参数的值int 类型的交换void swap(int* pa, int* pb){ int tmp = *pa; *pa = *pb; *pb = tmp;}泛型的实现前提:交换的两部分需要是同一数据类型,例如int与int,float与float编译器并不知道交换的两部分分别是什么数据类型,所以需要传入一个内存大小(字节数),将两个内存空间的位模式(bit pattern)进行交换

2021-02-04 14:21:29 222

原创 c++-正向和反向迭代器

2021-01-23 18:38:47 619

原创 c++-set/multiset的删除

今天做题遇到的问题先贴代码 se.insert(6); se.insert(8); se.insert(6); se.erase(6); cout << se.size() << endl;最后的输出结果为1这段代码的本意是维护一个堆,想当然的使用 erase 删除元素,没想到竟会删除两个元素,后来查阅了 cplusplus 发现确实是会删除所有6,想要删除某个6,需要通过迭代器删除http://www.cplusplus.com/ se.insert(6);

2021-01-21 15:58:01 2564

原创 git v_0.99 README翻译

git v_0.99翻译GIT - the stupid content tracker简介object databaseGIT - the stupid content trackergit 是一个愚蠢的内容追踪器简介This is a stupid (but extremely fast) directory content manager. It doesn’t do a whole lot, but what it does do is track directory contents e

2020-12-19 20:49:19 109

原创 find_cycle

寻找有向图中给定长度的环文章目录寻找有向图中给定长度的环1.已办与代办事项已办待办项目目录结构项目编译与执行1.编译2.执行1.已办与代办事项已办 项目架构 C++、 cmake、ctgwin Tiernan算法实现Tiernan J C. An efficient search algorithm to find the elementary circuits of a graph[J]. Communications of the ACM, 1970, 13(12): 722-726.

2020-12-19 20:35:14 333 2

原创 最近写cpp遇到的一些问题

STL sort算法的参数 cmpcmp中需要使用弱排序,对于单个元素排序(不能是a <= b)bool cmp(int a, int b){ return a < b;}二维比较bool cmp(const vector<int> a, const vector<int>& b){ if(a[0] != b[0]) return a[0] < b[0]; else return a[1] < b[1];}grp

2020-12-17 14:55:23 303

原创 Ubuntu CLion初体验

第一次尝试在ubuntu上使用CLion安装过程遇到的问题安装过程很简单,ubuntu应用商店安装遇到的问题不能编辑文件这个问题我的第一反应是权限不够,因为我不是使用root用户启动的程序所以我就想找到他的启程序,用root用户启动// 寻找clion的启动程序find / -name clion*// 进入目录cd xxxx// 以root用户启动sudo ./clion.sh大功告成!...

2020-11-11 23:18:42 337

原创 C语言-memset

memset辨析之前一直对memset搞不清楚,只知道memset设置的值为0肯定没问题今天就来啃一啃它先贴源码 void* cb_memset(void* buffer, int b, size_t size){ assert(buffer!=NULL); char* retAddr = (char*)buffer; while (size-- > 0){ *(retAddr++) = (char)b; } return retAddr; }

2020-08-21 23:26:18 159 1

原创 计网--网络层--(1)--IP编址方法

IPV4地址的分类IPV4地址分类的原因

2020-08-14 22:26:13 246

原创 计网--数据链路层(3)--数据链路层的硬件设备

数据链路层的硬件设备网卡别名网络适配器,Network Adapter硬件组成网卡是由RAM和ROM(read only memory)组成的,ROM中保存有MAC地址,由于在ROM中,所以不可更改。网卡作用1.计算机中的数据IO是并行的,而网络中传输的是比特流,属于串行IO。因此计算机如果想要使用网络和外界通信,就需要一个专门的硬件实现并行数据和串行数据的转换。2.网卡的ROM上保存有MAC地址,所以网卡的另一个作用是帧(数据链路层传输单位)的封装和解封装。工作在计算机网络中的哪一层

2020-08-12 21:26:38 1179 1

原创 计网--数据链路层(2)--两种信道和两种对应协议

计网–数据链路层(2)–两种信道和两种对应协议点对点信道和PPP协议点对点信道信道是物理层的概念,信道表示向某一个方向传送信息的媒体信道可以分为三种单工通信:数据只能单向传输半双工通信:数据可以双向通信,但是任意一方不能既发送消息又接受消息全双工通信:数据可以双向通信,任意一方可以同时发送和接收消息PPP协议英文全称:Point to Point ProtocolPPP协议是一种可靠传输协议广播信道和CSMA/CD协议以太网以太网最早使用总线结构,计算机都连接在总线上,当某一

2020-08-06 22:16:57 2362

原创 计网--数据链路层(1)--基本问题

数据链路层–三个基本问题1. 封装成帧定义网络层的数据报交付给数据数据链路层,数据链路层需要在报文(一般是IP数据包)的前后加上首部和尾部,将报文封装,区分开来。如果不使用首部和尾部进行帧定界,会出现什么问题接收方无法区分数据报(也叫分组),网络中的数据以分组为单位。2. 透明传输定义使用某些手段(如转义字符)把数据报中出现的与帧定界符相同的数据标识为普通数据,就像看不见{\color{red} 看不见}看不见一样为什么要使用透明传输如果不实现透明传输,每当数据报中出现了帧定界符相同的数

2020-08-05 22:30:03 360

原创 计算机基础--校验码

校验码1.基本知识校验目的:二进制数据传输中,使用校验码进行检错和纠错编码例如:数据有2位,冗余码位数1位原有数据编码新数据编码000000101111110码距表示两个编码中不相同的位数,00和01的码距为1,00和11的码距为2最小码距表示一组编码表示中,两两之间的码距的最小值,在上述例子中,原有编码的码距为1,新编码的码距为2。一般各种编码的码距都指的是最小码距最小码距和检纠错能力码距(d)的奇偶检错位数纠错位数奇

2020-08-05 21:07:41 1579

原创 用C语言实现的学生管理系统

用C语言实现的学生管理系统可以输入学生的学号,姓名,年龄,年级;可以输入学生的学号,姓名,年龄,年级;插入学生信息,默认插入到第一个通过学号,对学生进行排序由于自己学C语言指针时,不太认真,所以有这个作业时,遇到了很多困难,不过最后还是写出来了,很高兴#include <stdio.h>#include <stdlib.h>#include<malloc.h>#include<str

2017-10-14 19:47:10 1082 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除