- 博客(31)
- 收藏
- 关注
原创 Vectorの前因后果
按照扩容的深拷贝机制,只要容量大小不够用了,我们就会搬到新的数组里面去,也就是说**&vec[0]应该会变,但是&vec不会变**,因为移动的只是元素,而vec作为栈上面的一个对象自然地址不会改变。插入666之前我们的内存是这样的,那按照前面1.5倍扩容的说法,这一次应该就不会扩容,地址也就不会像前面一样变化,我们来看是不是这样。好,那至此为止,咱们就从头到尾的解释清楚了vector的来龙去脉以及一些底层的机制,不过这只是冰山一角,具体的源码比这还要复杂得多!这就是一个典型的野指针问题了。
2025-04-07 12:15:18
852
原创 C++解决大学课设所有管理系统(增删查改)
(**以通讯录管理系统为例)**,如果你的课设跟以上要求**某某管理系统**类似的话,也是要求增删查改的话,那么恭喜你刷到此文章。因为所有的大学课设管理系统的套路都是基本一致的。本篇作者将以在**实际公司内实际实习考核**为参考给大家介绍一份相对规范的管理系统。
2024-04-10 10:48:32
1278
2
原创 纯手工总结超详细关于计算机网络的五层知识点,看看你都掌握了没
UDP协议是计算机网络传输层的一种协议。它提供了一种无连接、不可靠、面向数据报的传输机制。面向数据报:数据分成一个个独立的数据包往外发送,每个包都是实体且独立。但是显然不够灵活。我们在网络传输过程中,数据是以报头 + 有效载荷的形式发送的,报头中包含了发送数据的相关信息。当我们还未发送的时候,数据都是存在发送缓冲区和接收缓冲区的。但是UDP协议没有真正意义上的发送缓冲区。因为udp如果调用发送的sendto,内容会直接交给内核处理!那么数据如果发送过去了我们面临的一个问题是:报头和有效载荷该如何分离呢?
2023-09-07 22:21:34
1351
10
原创 Linux下套接字TCP实现网络通信
socket函数是用于创建套接字的函数,创建成功返回文件描述符fd,失败返回-1;domain:指定套接字的地址族(Address Family)AF_INET:IPv4 地址族type:指定套接字的类型(Socket Type):有连接的字节流套接字,用于TCP协议protocol:可选参数,指定具体的传输协议。常用的有:0:自动选择合适的协议。
2023-08-25 10:30:18
1836
11
原创 Linux之套接字UDP实现网络通信
在服务器端的使用中,我们采用智能指针unique_ptr来帮助资源创建以及销毁,在使用中,我们调用以上server.hpp中类的初始化与启动函数即可.它提供了应用程序与网络通信之间的一座桥梁,因为它允许应用程序通过网络发送和接收相应的数据以实现不同主机之间的通信。我们通过实现客户端和服务器端,实现了通过套接字UDP创建了一个服务器,之后通过客户端链接并且通信的一个功能。 在服务器的头文件中,我们首先需要定义一个udpserver的类,服务器类中需要有服务器的。常见的有TCP和UDP等协议。
2023-08-20 22:06:41
1110
7
原创 Linux下设计简易线程池
线程池是一种池化技术,是消费者生产者模型的具体体现。它能够预先创建一批能够被重复使用的线程,而无需创建任何额外的空间。因为减少了线程的创建和开销,所以提高了系统的性能和资源的利用率。运行5个线程完成加减乘除的任务可以看到,我们运行起来后会有包括主线程在内的6个线程运行起来。在任务方面,我们可以实现每个线程都完成一个任务并返回结果的现象。那么事不宜迟,我们赶快来了解怎么实现一个简易线程池吧!
2023-08-15 17:51:09
316
8
原创 Linux之命名管道简单模拟进程间通信
命名管道(Named Pipe)是一种在任意进程之间进行通信的方式,由于可以通过名称进行识别,所以称为命名管道。
2023-08-04 20:10:29
330
4
原创 Linux下匿名管道简单模拟进程间通信
(如:父子进程)的进程间通信的一种管道。为了控制读写端,我们父进程关闭写端,子进程关闭读端,然后由父进程通过read接收到write写入的值输出即可。知道了基本知识再结合我们之前的所学习的文件描述符fd的相关知识我们就可以来尝试着简单模拟一下进程间通信了!通过fork()函数创建完子进程后,我们期望子进程写入,所以在子进程中关闭读端pipefd[0]。 由于匿名管道只能在具有血缘关系的进程间通信的一种措施,所以我们打算:父子进程来模拟,实现完后查看PPID确实是计数器在++,并且父子进程都是匹配的.
2023-08-04 17:47:07
284
2
原创 Linux文件描述符fd的理解
最后总结几点规则把最小未使用的fd下标给用户使用。系统默认占用的关闭后也可占用 2.**close()是系统调用接口,fclose()是C库函数。 3.printf/cout 默认往标准输出1号文件描述符去打印的,cerr/perror同理,默认往标准错误2号文件描述符去打印的 4.重定向的原理是:更改文件描述符fd,从而更改打印方向等。 5.文件描述符fd本质是文件结构体数组下标。 6.任何文件的前三号文件描述符0、1、2都是先默认被系统占用的。
2023-08-01 13:34:10
1278
原创 C++常见排序代码大全
我将按照一下常见排序给出相应的C++排序代码,并且必要时会给出非递归版本。 选择排序需要准备的Swap交换函数。 在快排前面加上一个判断即可。//只有end2越界。
2023-07-27 22:41:25
1353
原创 C++智能指针之shared_Ptr的原理以及简单实现
所绑定的一种解决可能存在的资源泄露等问题的策略。能够自动管理内存的大致原理是:对象调用构造,资源就保存,对象不使用之后调用析构,则资源顺带释放。它允许多个指针同时共享同一个对象,同时确保当所有指向该对象的指针都被销毁时,该对象也会被正确地释放。 关于智能指针,它是一种C++对象,它的行为类似于指针,但是它具有自动管理内存的能力。智能指针常见的思想是。记录有多少个指针指向它,存在即+1,不指向则-1,归0后则释放资源。我们想要的计数器必须是同一份资源的计数器,而且是多个对象所共享的,所以。
2023-07-27 22:07:31
3161
6
原创 C++11必看总结知识点,看完都懂的是老鸟
左值是一个数据表达式(变量名/解引用指针),如:int a。**什么是左值引用?**例如:int& ref = a;2.**什么是右值?**右值是一个数据表达式,如10,x+y;
2023-07-23 21:16:15
164
2
原创 C++布隆过滤器BloomFilter的简单实现
在谈布隆过滤器之前,我们首先需要知道哈希和位图。哈希,就是映射,位图,就是一个个bit位,一般用来判断在不在的模型。但是位图有一个很致命的缺点是:无法映射字符串等类型,所以引入了布隆过滤器。而布隆过滤器,的问题,而且还在哈希上升级了映射规则,不再采用单一映射,而即判断一个元素在不在是采用多个bit位来控制的。 那么,具体布隆过滤器是怎么样存放字符串的呢?现在一种常见的思路是将一个字符串的每个字符的ASCII码加起来代表一个字符串即可,但是相信很多朋友在读到这里的时候肯定心里已经列举了很多反例了。
2023-07-23 19:26:14
279
原创 C++位图bitset的简单实现
如上,若对一个100位大小的位图中,第10位和第11位进行置1,那么按照一个char一个字节8bit,应该是在第2个char中,且第二个char中的bit位应该是。 由于在实际代码中为了方便对位进行操作,我们选择底层使用vector包含一个字节的char的vector数组来具体移动位置。通过除的方法找到具体是哪一个char,再通过取模的方法具体找到char中的哪一个bit位。然后用当前值**或‘|’**上1之后左移的具体位数。 检测该位到底是0还是1,则与1左移后的j位。,用每一位来存放某种状态。
2023-07-23 18:14:15
262
原创 C++开散列(哈希桶)的模拟实现
插入数据之前一般要用**负载因子(有效数据个数/容器大小)**判断是否要扩容,一般的如闭散列的负载因子控制在0.7-0.8左右,但是这个哈希桶由于其链式结构特殊,只需等到数据放满(负载因子 == 1)再扩容即可。C++哈希开散列,又称哈希桶,是为了解决哈希冲突而诞生的方法。、以及里面的**插入Insert()**函数、**删除Erase()**函数、**查找Find()**函数、以及测试函数等。但若出现范围差距过大,如1,2,1000,2的情况,不可能开一个大小为1000的容器,所以想到了。
2023-07-22 11:23:04
167
原创 C++红黑树RBTree的插入
红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或者black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的.1.每个节点颜色不是黑色就是红色2.根节点颜色是黑色的3.当一个节点颜色为红色时,其子节点颜色必定为黑色4.对于每个节点,从该节点到其所有后代的简单路径上,均包含相同数目的黑色节点5.每个叶子节点都是指空节点且均为黑色为什么以上几点红黑树就能保证最长路径节点个数不会超过最短路径的两倍。
2023-07-12 11:20:38
422
1
原创 C++之AVL树的插入实现
整个节点我们采用三叉链结构(左、右、父亲指针)和使用KV模型,并且最重要的是每个节点都会有一个bf平衡因子的整数衡量。//左指针//右指针//双亲指针//存放数据的kv的pair对int _bf;//平衡因子AVLTreeNode(const pair& kv) //构造函数,_kv(kv),_bf(0){}整个类: public:我们需要一个Insert()插入函数、走中序Inorder函数、判高度Height()函数和判断平衡Isbalance()函数。
2023-07-10 17:08:24
148
1
原创 C++Map方括号[]的用法
在使用Map中我们可以使用map[key]来访问相应的key值,在以上代码的基础上添加一句,则能在原有基础上修改value值。具体实例如下:使用[]来统计vector中的单词。map的方括号[]经常用来统计单词使用个数,若使用map[key]++的方式则。用完后你会发现,哇!
2023-07-09 11:35:43
1207
3
原创 C++搜索二叉树的实现
拷贝构造如果不自己重新写的话,那么默认的二叉树的拷贝构造都是浅拷贝,这往往不能很好的满足实际需求,所以我们需要在自己重新写的拷贝构造里调用。 析构函数也是如此,需要调用按顺序依次释放每个new出来的节点的相应函数(对应后文的**Destroy()**函数)。 值得关注的是,由于搜索二叉树本身不允许有冗余重复的值,所以在写插入函数Insert()的时候,最好把返回值设置成。简单来说,就是左节点的值比根节点小,右节点的值比根节点大。2.删除的节点有一个孩子节点(只有左孩子或者右孩子)
2023-06-25 15:20:35
198
1
原创 一纸聊完C++继承
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保 持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类子类继承呈现了面向对象 程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继 承是类设计层次的复用。class + 派生类名 : 继承方式 + 基类名 例如:类似于下面方式就能简单创建出一个继承结构class Person //人类public:string name= "小明";
2023-06-22 18:50:51
123
2
原创 C++优先级队列PriorityQueue模拟实现
那么在生活中总会看到排队的情况出现。这已经就类似于队列的意义,提前排队的人提前出去。但实际生活中总会有人享有更高的优先级,譬如:军人优先、孕妇优先等。享有特殊性质的人总会有优先特权,这就是优先级队列(PriorityQueue)创建的意义。
2023-06-21 15:24:49
286
原创 C++List的简单模拟实现
只有在删除的时候才会失效,并且失效的只是指向被删除结点的迭代器,其它的迭代器并不会收到影响。的区别,所以为了避免就因为*与->返回值不同、别处都相同而再次copy一份大差不差的代码,采用了模板参数里面加上Ref指代引用&,和Ptr->指代返回指针类型。这里的默认插入是在pos位置的前面插入的。值得关注的是这里的erase删除函数需要返回一个,用于溯源到删除之前的节点位置(官方源码也是返回的iterator类型),否则可能会发生。首先,由于迭代器底层也是由指针设计而成,我们不妨把迭代器的操作想象成指针。
2023-05-27 15:27:07
137
5
原创 Linux保姆级介绍系统接口fork()函数
fork()函数是一个创建新进程(子进程)的一个系统接口。头文件由两个系统接口头文件sys/types.h和unistd.h所支持。注意:返回值类型为pid_t,用来标识和描述进程ID,本质是无符号整型unsigned int。
2023-05-05 17:16:58
614
3
原创 C++模拟底层实现vector
我们在vector的实现里面解决了几个经典的问题:迭代器失效问题、深浅拷贝问题。具体通过这次模拟实现我们更清楚的知道了vector具体底层的实现逻辑究竟是什么。
2023-05-01 23:04:04
184
2
原创 C++多态详解
多态(Polymorphism):通常是指同一个行为面对不同对象,呈现出不同的状态和结果。举个例子: 乘坐公交买票时,成人买票是全价,学生买票是半价,而老人买票是免费的。而对应到计算机里面:多态则由不同继承关系的类对象,去调用同一函数,而产生不同行为,那么具体怎么触发多态机制呢? ——虚函数就是被virtual关键字修饰的函数。 ——虚函数就是为重写而生 ---------> 重写就是为了多态而生。
2023-04-19 17:08:43
881
2
原创 C++深入了解类和对象
这里创建了Init()函数进行了初始化,但是如果每次调用对象都需要用Init来调用未免有些不方便,所以C++提供了构造函数。构造函数名称与类名相同,创建类对象由编译器自动生成,每个成员的初始值在对象的整个生命周期只有一次。
2023-03-05 22:01:15
96
原创 Linux系统下gcc使用以及原理详解
首先,一段程序电脑会进行预处理、编译、汇编、链接的翻译:由于Linux系统默认自带语言级别的头文件和库,经过此“四大才子”之手程序才会最终呈现出我们想要的方式。 编译、汇编、过程等过程中的命令选项组合起来是-E -S -c,活像键盘左上角的Esc退出键,只不过其中S是大写而已,因此可以看键盘左上角Esc来记忆命令选项。 一个可执行的.c文件只有经过上述的四步之后才会生成用户想要的文件,在Windows下大部分市面上的编译器都会替用户直接生成编译结果,而Linux下提供了。
2023-02-25 15:28:14
876
3
原创 基本快速排序及其两种优化(C语言数据结构)
众所周知,作为的门面,号称排序界的“,在一些正式场合,快排也是一些地方的官方排序结构。今天主要介绍的是基本版的快速排序以及对于基本版快排的两种性能优化。
2022-12-09 15:29:45
184
大学python通讯录管理系统(增删查改)
2024-04-12
C++一篇解决大学课设所有**管理系统(增删查改)
2024-04-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人