自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(108)
  • 资源 (3)
  • 问答 (1)
  • 收藏
  • 关注

原创 二次开发 vs2022+Autocad24

二次开发 vs2022+Autocad24

2024-03-16 20:11:06 387

原创 vs2022安装番茄助手后无法使用

vs2022安装番茄助手后无法使用

2024-03-15 21:01:57 311

原创 VS2022 配置QT5.9.9

vs2022+QT5.9.9 安装配置

2024-03-15 20:55:36 451

原创 常用链接记录

VS旧版本地址下载

2023-05-30 09:17:30 94

原创 令人意外的构造函数和析构函数

印象中构造函数和析构函数的使用不太会影响效率,但在实际开发中却遇到,一个函数频繁的调用一个类的构造函数和析构函数却很耗时。

2022-08-23 19:30:00 143

原创 【排序算法】:九大排序算法总结

直接插入排序参考博客:【排序算法】:直接插入排序 时间复杂度:平均情况:O(N^2)最好情况:O(N)最坏情况:O(N^2)空间复杂度:O(1) 稳定性:稳定希尔排序参考博客:【排序算法】:希尔排序时间复杂度:平均情况:O(N^1.3)最好情况:O(N)最坏情况:O(N^2)空间复杂度:O(1) 稳定性:不稳定选择排序参考博客:【排序算法】:选择排序 时间复杂度:平均情况:

2017-08-14 18:27:49 689

原创 【排序算法】:基数排序

定义基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的稳定性排序法。原理

2017-08-14 17:53:13 415

原创 【排序算法】:计数排序

思路: 设被排序的数组为A,排序后存储到B,C为临时数组。所谓计数,首先是通过一个数组C[i]计算大小等于i的元素个数,此过程只需要一次循环遍历就可以;在此基础上,计算小于或者等于i的元素个数,也是一重循环就完成。下一步是关键:逆序循环,从length[A]到1,将A[i]放到B中第C[A[i]]个位置上。原理是:C[A[i]]表示小于等于a[i]的元素个数,正好是A[i]排序后应该在的位置。而且

2017-08-14 14:58:08 450

原创 【排序算法】:归并排序

介绍归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 归并过程为:比较a[i]和b[j]的大小,若a[i]≤b[j],则将第一个有序表中的元素a[i]复制到r[k]中

2017-08-11 16:50:32 380

原创 【排序算法】:快速排序

介绍快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。三数取中我们在 进行快速排序时需要把数据划分为两个部分,需要一个key值。为了避免极端情况(key值是最大或最小值–>划分的两

2017-08-11 16:38:08 474

原创 【排序算法】:冒泡排序

介绍原理:(升序)比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。时间复杂度:O(N^2); 空间复杂度:O(1); 稳定性:稳定代码实现:void BubbleSort

2017-08-11 14:22:29 356 1

原创 【排序算法】:堆排序

介绍堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]] >= A[i]。在数组的升序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶。思想: 用升序建大堆,降序建小堆。(我

2017-08-11 11:16:37 326

原创 【排序算法】:选择排序

介绍选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。平均时间复杂度:O(n2) 空间复杂度:O(1) (用于交换和记录索引) 稳定

2017-08-11 11:02:45 344

原创 【排序算法】:希尔排序

介绍希尔排序是一种插入排序算法,它出自D.L.Shell,因此而得名。Shell排序又称作缩小增量排序。原理图: 思想:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2代码实现void ShellSort(int* arr, int len){ assert(arr);

2017-08-11 10:47:20 375

原创 【排序算法】:直接插入排序

介绍思想:每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。 实现原理:第一趟比较前两个数,然后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从后向前扫描,把第三个数按大小插入到有序表中;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程。 时间复杂度:O(N^2); 空间复杂度:O(1); 稳定性:稳定;代码实现代码实现://直接插入排序

2017-08-11 10:17:22 413

原创 C++智能指针(三):weak_ptr--解决shared_ptr循环引用问题

weak_ptr--解决shared_ptr循环引用问题我们在上篇博客讲了模拟实现三种智能指针:模拟实现三种智能指针循环引用但是我们说了,shared_ptr存在循环引用的问题。我们先介绍一下什么是shared_ptr的循环引用。我们知道,智能指针shared_ptr采用的是引用计数的方式,下面我们来写一个双向链表。#include<iostream>

2017-08-11 09:48:18 2614

原创 C++智能指针(二):模拟实现三种智能指针

上一篇博客我们简单介绍了智能指针:简单介绍智能指针有关shared_ptr的循环引用问题可以参考博客:weak_ptr–解决shared_ptr循环引用问题auto_ptr模拟实现template<class T>class Autoptr{public: Autoptr(T* ptr = NULL) :_ptr(ptr) {} Autoptr(Autop

2017-08-10 21:47:25 1027

原创 C++智能指针(一):智能指针的简单介绍

智能指针的简单介绍,RAII,auto_ptr,scoped_ptr(boost) unique_ptr(c++11) 防拷贝 –简单粗暴的设计 ,3.shared_ptr(boost/c++11) 引用计数 –功能强大(支持拷贝,支持定制删除器) 缺陷–循环引用(可采用weak_ptr配合解决RAII定义RAII(Resource Acquisition Is Initialization),也称为“资源获取就是

2017-08-10 21:11:59 414

原创 C/C++内存管理:malloc/calloc/realloc区别和联系

malloc/calloc/realloc区别和联系。用法详解头文件它们三个头文件均为:#include <stdlib.h>函数原型mallocvoid *malloc(size_t size);void* 表示未确定类型的指针,void *可以指向任何类型的数据. **参数:**size为需要内存空间的长度. 返回值:成功返回系统分配的地址,失败返回NULL。callocvoid *calloc(si

2017-08-09 11:38:09 312

原创 详解初始化列表

初始化列表定义构造函数有个特殊的初始化方式叫“初始化表达式表”(简称初始化列表)。初始化列表位于函数参数表之后,却在函数体 {} 之前。这说明该表里的初始化工作发生在函数体内的任何代码被执行之前。Date(int year, int month, int day)//带参构造函数 :_year(year) , _month(month) , _day(

2017-08-08 13:01:04 1929

原创 详解C++类中的6个默认成员函数

构造函数定义成员变量为私有的,要对他们进行初始化,必须用一个共有成员函数来进行。同时这个函数应该有且仅在定义对象时自动执行一次,这时调用的函数称为构造函数(constructor)。特征:函数名与类名相同。无返回值。对象构造(对象实例化)时系统自动调用对应的构造函数。构造函数可以重载。构造函数可以在类中定义,也可以在类外面定义。如果类定义中没有给出构造函数,则C++编译器自动生成一个缺省

2017-08-08 12:37:43 379

原创 strdup详解和模拟实现

模拟实现strdup。strdup和strcpy的区别。strdup函数介绍函数原型:char* strdup(const char* str)函数功能:将串拷贝到新建的位置处 返回值:返回一个指针,指向为复制字符串分配的空间;如果分配空间失败,则返回NULL值。 注意:strdup不是标准的c函数。strdup()在内部调用了malloc()为变量分配内存,不需要使用返回的字符串时,需要用free()释

2017-08-07 09:57:59 2352

原创 模拟实现strstr函数

strstr函数简介函数原型:char *strstr( const char *string, const char *strCharSet );函数功能:搜索一个字符串在另一个字符串中的第一次出现。 返回值:若strCharSet是string的子串,则返回strCharSet在string的首次出现的地址;如果strCharSet不是string的子串,则返回NULL。 代码实例:

2017-08-06 21:50:39 319

原创 strchr、strrchr、memchr函数详解及模拟实现

strchr函数介绍函数原型:char* strchr(const char* string,int c);函数功能:在字符串中查找指定字符的第一个出现 返回值:如果成功,返回该字符以及其后面的字符,如果失败,则返回 NULL。 代码实例:char arr[] = "0asdfgqwqefgf";char* ret = strchr(arr, 'f');cout << ret << endl

2017-08-06 20:34:20 986

原创 shell基本语法及实现彩色进度条

基本语法条件测试:test [条件测试test或[可以测试一个条件是否为真。如果测试结果为真,则该命令的退出码为0,如果测试结果为假,则命令的退出码为1(注意与C语言的逻辑表示正好相反)。 例如:测试两个数的大小关系 其中:虽然看起来很奇怪,但左⽅括号[确实是⼀个命令的名字,传给命令的各参数之间应该⽤空格隔开。 我们进行比较时需要一些常用的测试命令: -eq(等于)、-ne(不等于)、

2017-07-21 19:43:03 375

原创 I/O多路转接之select服务器

五种I/O模型Unix共有五种I/O模型:阻塞式I/O非阻塞I/OI/O复用(select和(e)poll)信号驱动I/O(SIGIO)异步I/O(Posix.1的aio_系列函数)阻塞I/O模型应用程序调用一个IO函数,导致应用程序阻塞,等待数据准备好。如果数据没有准备好,一直等待。数据准备好了,从内核拷贝到用户空间,表示IO结束,IO函数返回成功指示。非阻塞I/O模型我们把一个套接口

2017-07-17 21:40:14 340

原创 计算机网络:UDP套接字通信

UDP的主要特点UDP是无连接的。UDP使用尽最大努力交付。UDP是面向报文的。(1)利用socket函数创建套接字(2)服务器用bind进行IP和端口号的绑定(3)不需要设置监听状态(4)绑定后直接读写如何保证UDP的可靠性

2017-07-17 14:08:25 1499

原创 计算机网络:TCP套接字通信

单进程的套接字通信,多进程的套接字通信 ,多线程的套接字通信,套接字创建函数socket,服务器绑定函数bind,设置监听状态函数listen,请求连接函数connect,

2017-07-15 21:45:50 1142

原创 TCP的三次握手和四次挥手详解

我们在上一篇博客中介绍了TCP服务和分析TCP的首部,而今天讲的三次握手与四次挥手也会用到TCP的首部,不太清楚的小伙伴可以阅读一下:TCP报文段首部分析TCP的三次握手TCP以全双工方式传送数据。在任何数据传送之前,要使每一方能确知对方的存在。双方都必须对通信进行初始化,并得到对方的认可。当两个TCP建立连接后,他们就能够同时互相发送报文段。 TCP中建立连接采用3次握手的方式实现。建立连接的过

2017-07-14 21:50:45 398

原创 面试题:合并两个有序链表

题目:合并两个有序链表,合并以后的链表依旧有序。 思路我们合并一个有序的链表,首先我们要找出两个链表中头结点小的那个。链表1的头结点的值小于链表2的头结点的值,因此链表1的头结点将是合并后链表的头结点。 在剩余的链表中,我们要继续寻找头街点较小的那一个,继续连接在1后面。 当我们得到两个链表中值较小的头结点并把它连接到已经合并的链表之后,两个链表剩余的结点依然是排序的,因此合并的步骤和

2017-07-14 19:42:49 435

原创 TCP的四种定时器

为了实现实现TCP,对每个连接TCP管理4个不同的定时器,如下图所示: 重传定时器重传定时器:为了控制丢失的报文段或丢弃的报文段,也就是对报文段确认的等待时间。当TCP发送报文段时,就创建这个特定报文段的重传计时器,可能发生两种情况:若在计时器超时之前收到对报文段的确认,则撤销计时器;若在收到对特定报文段的确认之前计时器超时,则重传该报文,并把计时器复位;重传时间=2*RTT;RTT的值应该动态计

2017-07-13 21:30:14 311

原创 TCP报文段首部分析详解

TCP协议传输控制协议TCP(Transmission Control Protocol) 是运输层的主要协议,运输层另一个重要的协议是用户数据报协议UDP(User Datagram Protocol),这两个控制协议在协议栈中的位置入下图: TCP最主要的特点TCP是面向连接的运输层协议每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的。TCP提供可靠交付的服务。TCP提供

2017-07-13 20:49:19 2468

原创 计算机端口详解

概念计算机“端口”是英文port的义译,可以认为是计算机与外界通讯交流的出口。按端口号可分为3大类:公认端口(Well Known Ports);注册端口(Registered Ports);动态和/私有端口(Dynamic and/or Private Ports)端口分类公认端口(Well Known Ports):从0到1023,它们紧密绑定(binding)于一些服务。通常这些端口的通讯明

2017-07-13 16:27:15 329

原创 NAT技术与代理服务器

NAT技术概念NAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。 这种方法需要在专用网连接到因特网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地

2017-07-13 16:05:35 401

原创 CRC校验算法

基本概念CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。 在网络通信中很多的帧或数据包中都采用CRC校验,其实CRC校验非常简单,我们

2017-07-12 20:35:15 565

原创 Linux--crond和crontab学习

Linux 系统则是由 cron (crond) 这个系统服务来控制的。Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。另 外, 由于使用者自己也可以设置计划任务,所以, Linux 系统也提供了使用者控制计划任务的命令 :crontab 命令。crond简介crond 是Linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务

2017-07-12 19:32:35 431

原创 Linux--守护进程

守护进程也称为精灵进程(Daemon),是运行在后台的一种特殊进程。 。进程组,作业 终端,创建守护进程fork两次?#include<stdio.h>pid_t setsid(void)。守护进程的特点,创建守护进程的具体步骤,代码实现,daemon()函数创建守护进程

2017-07-12 15:36:31 247

原创 Linux--线程安全与可重入函数的区别和联系

可重入函数概念函数被不同的控制流程调用,有可能在第一次还没返回时就再次进入该函数,这称为重入。 不可重入函数,不可重入函数举例,线程安全,线程安全与可重入函数的区别

2017-07-11 15:32:22 317

原创 子进程的异步等待方式

基础知识在前面的博客中我们已经介绍了僵尸进程(僵尸进程与孤儿进程)的相关知识,我们说过可以通过调用wait和waitpid函数清理僵尸进程,父进程可以阻塞等待子进程结束,也可以以非阻塞的查询是否有子进程结束等待清理(也就是轮询的方式)wait与waitpid函数1.wait函数#include<sys/types.h>#include<sys/wait.h> pid_t wait(int* st

2017-07-10 16:35:49 301

原创 面试题:螺旋队列

下面是一个螺旋队列: 问题: 看清以上数字排列的规律,设1点的坐标是(0,0),x方向向右为正,y方向向下为正。例如:7的坐标为(-1,-1),2的坐标为(0,1),3的坐标为(1,1)。编程实现输入任意一点坐标(x,y),输出所对应的数字;或输入任意数字,输出该数字的坐标。解析: 我们从图片中可以观察到,这个螺旋队列是顺时针螺旋向外扩展的。我们可以把它看成一层一层向外延伸,第0层为中间的那个1

2017-07-09 11:48:51 1828 1

番茄助手可以支持vs2022

番茄助手可以支持vs2022 亲测好用 建议下载使用

2024-03-15

dxf组码中文版手册。

autocad dxf组码中文手册

2022-08-10

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

TA关注的人

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