- 博客(50)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Linux - 线程的基本编程与同步互斥机制
线程是应用程序并发执行多种任务的一种机制,在一个进程中可以创建多个线程执行多个任务。每个进程都可以创建多个线程,创建的多个线程共享进程的地址空间,即线程被创建在进程使用的地址空间上。相较于进程来说,线程的创建不需要对地址空间进行复制,因此创建子线程比创建子进程要快得多。同一个进程中的多个线程可以并发的执行。在多处理器环境下,多个进程可以同时并行。如果一个线程因等待 I / O 操作而阻塞,那么其他线程仍然可以继续运行。同时,同一个进程创建的线程之间进行通信相对于进程来说,要方便、快速很多。原因在于线程之间是
2023-09-28 17:00:40
426
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 数据结构之并查集
并查集(Disjoint Set)是一种精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题。经典的应用有连通图、最小生成树Kruskal算法、最近公共祖先(LCA) 等
2023-08-16 01:57:39
430
1
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 数据结构课设(停车场管理系统的设计与实现)
设停车场只有一个可停放几辆车的狭长通道,只有一个大门可供汽车出入。汽车在停车场内按车辆到达的先后顺序依次排列,若车场内已经停满了几辆车;则后来的汽车只能在门外的便道上等候,一旦停车场内有车辆开走,则排在便道上的第一辆汽车即刻进入
2023-06-05 10:21:44
12712
6
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 数据结构与算法——队列的定义与运算
队列(Queue)简称队,它同栈一样,也是一种运算受限的线性表,其限制是仅允许在表的一段进行插入,而在另一端进行删除。我们吧进行插入的一段成为队尾(rear),进行删除的一端称为队头(front)。向队列中插入新元素称为入队或进队,新元素入队后又作为队尾;从队列中删除元素称为出队或离队,元素出队后,其后继元素成为新的队头元素。由于队列的插入、删除都是从队的一段进行的,每个元素必须以一定的顺序出队,即先进是元素先出队,所以也称队列为先进先出表(First In First Out,简称FIFO)。
2023-05-26 21:58:42
1063
1
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 数据结构与算法——约瑟夫环
p=p->next;此时就已经找到了报数位m的人对应的结点以及他对应的前驱结点,让r指向p(准备释放结点p),输出p->info,让p=p->next,这时能够输出第一个出列的人,但为了后面继续查找(报数)并输出下一个出列的人,还得判断p、q两指针的位置并修改它们的指向:若p->next=NULL(即p为表尾),则head->next=p;2.开始报数直至m,此时找到了要出列的人对应的结点以及他的前驱结点,让p出列(输出p->info),让r指向p,准备释放,p、q仍然不为表尾,所以p=p->next;
2023-05-24 13:49:13
5052
2
原创 Web开发技术大作业(HTML\CSS\PHP\MYSQL\JS)
本次实验旨在掌握并熟练运用Web开发技术,提高自己的编程能力,同时通过实际操作加深对Web开发技术的理解。介绍永州的独特环境和地理位置、美食、旅游等等,并使用视觉化手段进行展现。通过使用HTML、CSS、JavaScript和PHP等编程语言展示永州的文化、历史和特色,提高人们对永州的认知。通过实验了解和掌握HTML、CSS、JavaScript和PHP在网页开发中的应用。
2024-06-17 13:30:29
1036
原创 3月27日 - 嵌入式系统调研报告
嵌入式系统的发展历程可以分为四段:20世纪60年代。当时,计算机技术还处于早期阶段,主要应用于科研和军事领域,比如:20世纪70年代,随着计算机技术的发展,嵌入式系统开始应用于更多的领域,如通信、汽车和电子设备。这些嵌入式系统通常是基于单片机或单板计算机构建的,比如:20世纪80年代,随着微处理器技术的快速发展,嵌入式系统的规模和复杂度不断增加。这个时期,嵌入式系统开始应用于更多的消费电子产品、工业自动化和医疗设备,比如:21世纪,随着网络技术和无线通信技术的迅猛发展,嵌入式系统在物联网领域得到广泛应用。物
2024-03-25 18:34:44
1041
原创 浅谈C++的函数重载
对于一组函数,在其函数名都相同、参数列表的数目或类型不同的前提下,加上它们都属于同一个作用域中,那么我们就可以把它们称作函数重载。即,如下常见的比较重载函数,分别用于intdouble之间的大小比较。
2024-03-18 01:18:38
352
原创 浅谈C++绑定器bind1st、bind2nd和函数对象function
今天我们先来谈谈C++ 标准库里面的绑定器bind1stbind2nd和函数对象function。
2024-03-15 13:19:09
987
原创 浅谈C/C++的new和delete以及对象池的实现
今天我们来谈谈C++中的new和delete😊😊😊。在软件开发中,常常需要动态地分配和撤销内存空间,C语言中利用库函数malloc和free分配和撤销内存空间的。
2024-03-15 12:17:39
383
原创 浅谈C++的浅拷贝和深拷贝问题
在C++中,浅拷贝和深拷贝是两种对象复制的方式,其中🐱浅拷贝(Shallow Copy)是指将一个对象的指赋值到另一个对象中,但只赋值对象的成员变量的值,并不对复制对象的动态分配内存(如堆内存)等外部资源,这也就意味着当原对象修改自己指向的外部资源时,可能会影响到另一个对象;这块的话其实也是浅拷贝问题的一种,因为我们没有在类中自定义赋值函数,C++编译器会调用它的默认赋值函数,做的也是数据的内存拷贝(即浅拷贝)。今天我们来谈谈C++的浅拷贝和深拷贝问题
2024-03-15 11:43:51
1185
1
原创 浅谈C/C++的常量const、指针和引用问题
今天我们来探讨C/C++中const、指针和引用的相关问题。这些概念是编程中的重要组成部分,它们的正确使用对于代码的可读性和可维护性至关重要。通过深入了解const的不可变性、指针的灵活性以及引用的简洁性,我们能够更好地掌握编程的精髓,并写出更加健壮和高效的代码
2024-03-15 11:38:56
764
原创 每日一面——C++11的新特性
左值引用是具名变量值的别名,而右值引用则是不具名(匿名)变量的别名。为了解决循环引用导致的内存泄漏,引入了弱指针weak_ptr,weak_ptr的构造函数不会修改引用计数的值,从而不会对对象的内存进行管理,其类似一个普通指针,但是不会指向引用计数的共享内存,但是可以检测到所管理的对象是否已经被释放,从而避免非法访问。C++11中增加了右值引用,右值引用关联到右值时,右值被存储到特定位置,右值引用指向该特定位置,也就是说,右值虽然无法获取地址,但是右值引用是可以获取地址的,该地址表示临时对象的存储位置。
2024-03-15 10:30:57
978
原创 每日一面——虚拟继承、抽象类和四种类型转化
C++支持多继承,除了public、private、protected三中继承方式外,还提供虚拟继承 virtual ,如果类B和类C同时公有继承类A,而类D有多重继承类B、C,这这种方式被叫做菱形继承虚拟继承的情况下,无论基类被继承多少次,只会存在一个实体虚拟继承基类的子类中,子类会增加某种形式的指针,或者指向虚基类对象,或者指向一个相关的表格;
2024-03-13 15:17:19
750
原创 每日一面——成员初始化列表、移动构造和拷贝构造
移动操作的发生的时候,是当移动值的对象是未命名的对象的时候。有时候我们会遇到这样一种情况,我们用对象a初始化对象b后对象a我们就不在使用了,但是对象a的空间还在呀(在析构之前),既然拷贝构造函数,实际上就是把a对象的内容复制一份到b中,那么为什么我们不能直接使用a的空间呢?如果把拷贝构造函数的参数设置为值传递,那么参数肯定就是本类的一个object,采用值传递,在形参和实参结合的时候,是需要调用本类的拷贝构造函数,就形成一个死循环,是为了避免拷贝构造函数无线递归下去。必须使用成员初始化的四种情况。
2024-03-12 22:19:26
1064
原创 每日一面——封装、继承和多态
面向对象是一种编程思想,把一切东西看出是一个个对象,它们各自有各自的属性,把这些对象拥有的属性变量和操作这些属性的函数打包成一个类来表示面向对象和面向过程的区别面向过程:根据业务逻辑从上到下写代码面向对象:将数据与函数绑定到一起,进行封装,这样能够快速的开发程序,减少重复代码的重写过程。
2024-03-10 22:30:55
909
1
原创 每日一面——虚函数、动态绑定、静态绑定
但是在对象创建的过程中,由于对象还没有完全构造成功,因此在构造函数和析构函数中不能使用虚函数,这是因为在对象构造期间,虚函数表尚未构建,而且对象还没有完成其完整的初始化。同样,派生类构造函数也不能是虚函数,因为派生类的构造函数必须调用其基类的构造函数,如果基类的构造函数是虚函数,将无法保证正常的顺序。因此,类的构造函数不能是虚构函数。2)析构函数可以被声明为虚函数,因为当基类指针指向派生类对象的时候,发生多态,如果不将基类的析构函数定义为虚函数的话,那么派生类的析构函数就无法执行,造成内存泄露。
2024-03-09 20:36:08
681
2
原创 每日一面——const关键字
对于函数值传递的情况,因为参数传递是通过复制实参创建一个临时变量传递进函数的,函数内只能改变临时变量,但无法改变实参。但是在引用或指针传递函数调用中,因为传进去的是一个引用或指针,这样函数内部可以改变引用或指针所指向的变量,这时const 才是实实在在地保护了实参所指向的变量。底层const:指的是const修饰的变量所指向的对象是一个常量,指的是所指变量,就是 * 号的左边。顶层const:指的是const修饰的变量本身是一个常量,无法修改,指的是指针,就是 * 号的右边。
2024-03-07 08:14:20
565
原创 每日一面——static关键字
在c++中,static关键字可以用于定义类中的静态成员变量:使用静态数据成员,它既可以被当成全局变量那样去存储,但又被隐藏在类的内部。⑦ 由于static修饰的类成员属于类,不属于对象,因此static类成员函数是没有this指针的,this指针是指向本对象的指针。正因为没有this指针,所以static类成员函数不能访问非static的类成员,只能访问 static修饰的类成员;⑤ 在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量。
2024-03-06 08:14:08
570
原创 每日一面——inline关键字和include头文件
肯定包括,如上知,编译器可以选择调用内联函数,而非直接展开它。因此,在内存中仍然需要一份内联函数的定义,以供调用。而且,一致性是所有语言都应该遵守的准则,普通函数有可以有指向它的函数指针,那么内联函数也可以有,因此内存中需要。。。,使得函数指针可以存在内联函数是在编译是展开,而宏是在编译预处理时展开;在编译时,内联函数直接被嵌入到目标代码中去,而宏只是做了简单的文本替换。
2024-03-05 08:12:46
1054
原创 MySQL事务和锁机制
事务是数据库区别于文件系统的重要特征之一。在文件系统中,如果正在写文件,但是操作系统奔溃了,这个文件就很有可能被破坏。当然,有一些机制可以把文件回复到某个时间点。不过,如果需要保证两个文件同步,这些文件系统可能就显得无能为力了,例如,当需要更新两个文件时,更新完一个文件后,在更新完第二个文件之前系统重启了,就会产生两个不同步的文件,因此这也就是数据库系统引入事务的主要目的。
2024-03-02 18:22:13
1183
原创 MySQL存储引擎及索引机制
插件式存储引擎是MySQL数据库最重要的特性之一,用户可以根据应用的需要选择如何存储和索引数据、是否使用事务等。InnoDBMyISAMMemory等等,在mysql 的命令行窗口中,我们可以通过命令查看。
2024-02-29 07:49:34
1067
原创 【线程池项目(一)】项目介绍和代码展示
作为五大池之一(内存池、连接池、线程池、进程池、协程池),线程池的应用非常广泛,不管是客户端程序,还是后台服务器程序,都是提高业务处理能力的必备模块。在高并发场景下,系统能够更加稳定地处理大量任务。
2024-02-21 14:52:13
1141
原创 (二)模板元编程简介
元编程(meta-programming)也被称为“超程序”,“超编程”或“产生式编程”,这样说法一定程度上反映了其本质——它是一种位于普通程序之上、超越普通程序的程序,可以操纵、产生程序的程序。模板元编程本质上是泛型编程的一个子集,从广义上来说,所有使用template 的泛型代码都可以称作元程序——因为泛型编程代码并不是真正可编译执行的代码,它们只是定义了代码的产生规则,是用来生成代码的“模板”。然而模板元编程又不完全等同于泛型编程,它是一种“函数式编程”,是图灵完备的,可以“计算”任何东西。
2024-01-07 11:48:06
1358
原创 (一)全新的C++语言
C++ 的最初目标就是成为 “更好的 C”,因此新的标准首先要对基本的底层编程进行强化,能够反映当前计算机软硬件系统的最新发展和变化(例如多线程)。另一方面,C++对多线程范式的支持增加了语言的复杂度,通常一个范式就相当于其他的一门编程语言,学习难度大。保持稳定性和兼容性尽量使用库而不是扩展语言来增加新特性对初级用户和高级用户都能提高良好的支持增强类型的安全性增强直接操作硬件时的效率和功能新的C++11/14 标准基本实现了这些目标,而且依然较好地保持了与之前版本的兼容性。
2024-01-06 09:10:57
906
原创 Codeforces Round 913 (Div. 3)
这题根据贪心策略分析可知,无论字符串的形式如何变化,最终结果定是0或1中的一个,我们可以先求出该字符串中每个字符的出现次数,找到最大的那个cnt,要是cnt * 2 >= n说明该字符串最多最多就只能用剩下的其他字符消去,即res = cnt - (n - cnt);这当时想了很久,后面突然发现可以开两个vector 数组a, b ,a用来存输入的大写字母,b用来存小写字母,用 *.second 记录插入字母的时间顺序,最后排序输出即可。反之,遍历完返回1。
2023-12-07 15:45:34
396
原创 AtCoder Beginner Contest 297
C题是求在一个方阵里,每一行相邻的相同字符可以被替换掉,接着进行下一次查找,直至结束得到的最多可以被替换的数目。B题是对特定字符串的条件判断,这里依次记录每个位置然后判断是否满足。A题就是求第一次出现相邻元素之差大于d的位置,直接模拟即可。
2023-11-23 22:27:03
362
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人