- 博客(51)
- 收藏
- 关注
原创 mysql语句
3.关系数据库标准语言SQL3.2学生-课程数据库3.3数据定义3.3.2基本表的定义、删除与修改3.3.2.1定义基本表3.3.2.2数据类型3.3.2.4修改基本表3.3.2.5删除基本表3.4数据查询3.4.1单表查询3.4.1.1选择表中的若干列3.4.1.1.1查询指定列3.4.1.1.2查询全部列3.4.1.1.3查询经过计算的值3.4.1.2选择表中的若干元组3.4.1.2.
2024-05-05 17:48:56
306
原创 文件操作示例
该成员函数将内存中 buffer 所指向的 nCount 个字节的内容写入文件,返回值是对函数所作用的对象的引用,如 obj.write(...) 的返回值就是对 obj 的引用。都是使用 fread() 读取,要判断其返回值与指定读取个数的大小,如果小于实际要读的个数,就说明发生读取异常,如果等于实际要读的个数,就说明是因读取成功而结束;该成员函数从文件中读取 nCount 个字节的内容,存放到 buffer 所指向的内存缓冲区中,返回值是对函数所作用的对象的引用。ios::cur:表示流的当前位置。
2024-03-25 23:17:56
766
原创 TB-C/C++
因为操作系统会在底层对栈提供支持,会分配专门的寄存器存放栈的地址,栈的入栈出栈操作也十分简单,并且有专门的指令执行,所以栈的效率比较高也比较快。在定义的同时必须初始化。int (*p)[10]表示数组指针,强调是指针,只有一个变量,是指针类型,不过指向的是一个int类型的数组,这个数组大小是10。int (*p)(int)是函数指针,强调是指针,该指针指向的函数具有int类型参数,并且返回值是int类型的。int *p(int)是函数声明,函数名是p,参数是int类型的,返回值是int *类型的。
2024-01-03 22:13:25
1289
1
原创 boost智能指针
1998年修订的第一版C++标准只提供了一种智能指针:。它基本上就像是个普通的指针: 通过地址来访问一个动态分配的对象。之所以被看作是智能指针,是因为它会在析构的时候调用delete操作符来自动释放所包含的对象。当然这要求在初始化的时候,传给它一个由new操作符返回的对象的地址。既然的析构函数会调用delete操作符,它所包含的对象的内存会确保释放掉。这是智能指针的一个优点。当和异常联系起来时这就更加重要了:没有。
2023-12-11 22:06:11
153
原创 boost多线程
i < 5;新建线程里执行的那个函数的名称被传递到 boost::thread 的构造函数。一旦上述示例中的变量 t 被创建,该 thread() 函数就在其所在线程中被立即执行。同时在 main() 里也并发地执行该 thread()。为了防止程序终止,就需要对新建线程调用 join() 方法。join() 方法是一个阻塞调用:它可以暂停当前线程,直到调用 join() 的线程运行结束。
2023-12-11 21:34:15
231
原创 linuxTcp状态转换
在TCP进行三次握手,或者四次挥手的过程中,通信的服务器和客户端内部会发送状态上的变化,发生的状态变化在程序中是看不到的,这个状态的变化也不需要程序猿去维护,但是在某些情况下进行程序的调试会去查看相关的状态信息,先来看三次握手过程中的状态转换。
2023-11-18 09:59:27
322
原创 linux三次握手、四次挥手
源端口:表示发送端端口号,字段长 16 位,2个字节目的端口:表示接收端端口号,字段长 16 位,2个字节序号(sequence number):字段长 32 位,占4个字节,序号的范围为 [0,4284967296]。由于TCP是面向字节流的,在一个TCP连接中传送的字节流中的每一个字节都按顺序编号首部中的序号字段则是指本报文段所发送的数据的第一个字节的序号,这是随机生成的。序号是循环使用的,当序号增加到最大值时,下一个序号就又回到了0。
2023-11-16 22:28:56
386
原创 linux套接字-Socket
使用一个128位的整形数描述一个IP地址,16个字节也可以使用一个字符串描述这个IP地址:2001:0db8:3c4d:0015:0000:0000:1a2f:1a2b分成了8份,每份2字节,每一部分以16进制的方式表示按照IPv6协议计算,可以使用的IP地址共有 2^128 个端口的作用是定位到主机上的某一个进程,通过这个端口进程就可以接受到对应的网络数据了。比如: 在电脑上运行了微信和QQ, 小明通过客户端给我的的微信发消息, 电脑上的微信就收到了消息, 为什么?
2023-11-15 21:49:33
346
原创 C++强制类型转换
C风格的强制类型转换统一使用(),而()在代码中随处可见,所以也不利于使用检索工具定位强转的代码位置。C++ 对类型转换进行了分类,并新增了四个关键字来予以支持,它们分别是:关键字 说明static_cast 用于良性转换,一般不会导致意外发生,风险很低。const_cast 用于 const 与非 const、volatile 与非 volatile 之间的转换。
2023-11-14 22:07:32
642
原创 using的使用-C++11
typedef 旧的类型名 新的类型名;// 使用举例被重定义的类型并不是一个新的类型,仅仅只是原有的类型取了一个新的名字。和以前的声明语句一样,这里的声明符也可以包含类型修饰,从而也能由基本数据类型构造出复合类型来。C++11中规定了一种新的方法,使用别名声明(alias declaration)来定义类型的别名,即使用using。在使用的时候,关键字using作为别名声明的开始,其后紧跟别名和等号,其作用是把等号左侧的名字规定成等号右侧类型的别名。
2023-11-13 22:22:11
75
原创 linux手写线程池-C++
Task task;Task t;return t;// 实例化任务队列do {// 初始化线程池// 根据线程的最大上限给线程数组分配内存cout << "malloc thread_t[] 失败...." << endl;;break;// 初始化// 初始化互斥锁,条件变量= 0 ||= 0)break;/////////////////// 创建线程 //////////////////// 根据最小线程个数, 创建线程。
2023-11-13 22:09:51
107
原创 linux手写线程池-C
/ 线程池结构体// 任务队列// 容量// 当前任务个数// 队头 -> 取数据// 队尾 -> 放数据// 管理者线程ID// 工作的线程IDint minNum;// 最小线程数量int maxNum;// 最大线程数量// 忙的线程的个数// 存活的线程的个数// 要销毁的线程个数// 锁整个的线程池// 锁busyNum变量// 任务队列是不是满了// 任务队列是不是空了// 是不是要销毁线程池, 销毁为1, 不销毁为0dobreak;
2023-11-12 21:11:26
51
原创 linux线程同步
假设有4个线程A、B、C、D,当前一个线程A对内存中的共享资源进行访问的时候,其他线程B, C, D都不可以对这块内存进行操作,直到线程A对这块内存访问完毕为止,B,C,D中的一个才能访问这块内存,剩余的两个需要继续阻塞等待,以此类推,直至所有的线程都对这块内存操作完毕。线程对内存的这种访问方式就称之为线程同步,通过对概念的介绍,我们可以了解到所谓的同步并不是多个线程同时对内存进行访问,而是按照先后顺序依次进行的。
2023-11-12 17:46:43
42
原创 linux多线程
线程和进程一样,子线程退出的时候其内核资源主要由主线程回收,线程库中提供的线程回收函叫做pthread_join(),这个函数是一个阻塞函数,如果还有子线程在运行,调用该函数就会阻塞,子线程退出函数解除阻塞进行资源的回收,函数被调用一次,只能回收一个子线程,如果有多个子线程则需要循环进行回收。如果多个线程共用同一个虚拟地址空间,每个线程在栈区都有一块属于自己的内存,相当于栈区被这几个线程平分了,当线程退出,线程在栈区的内存也就被回收了,因此随着子线程的退出,写入到栈区的数据也就被释放了。
2023-11-12 14:59:18
27
原创 C Library-ctime
size_t对应于语言运算符sizeof返回的整形数据类型,并在头文件(以及其他文件)中定义为无符号整形类型。如果夏令时有效,夏令时标志(tm_isdst)大于零,如果夏令时无效,则大于零,而如果信息不可用,则小于零。此类型由<ctime>标头的时钟函数返回,表示自程序执行开始以来的点击次数。此宏扩展为一个表达式,表示函数clock返回的一秒钟内的时钟节拍数。此类型由时间函数返回,并被标头的其他一些函数用作参数。能够表示时钟刻度计数并支持算术运算的类型。
2023-06-03 14:46:52
208
原创 基本算法思想-枚举
基本思想是不重复、不遗漏地穷举所有可能情况,或把信息条理化、系统化、或进行分类,寻找规律,引出信息,以便从中寻找满足条件的结果。
2023-03-11 16:02:22
42
原创 读取文件中文乱码
不同的国家和地区制定了不同的标准,由此产生了 GB2312、GBK、Big5、Shift_JIS 等各自的编码标准。这些使用 1 至 4 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文Windows操作系统中,ANSI 编码代表 GBK 编码;在日文Windows操作系统中,ANSI 编码代表 Shift_JIS 编码。不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中。
2023-03-11 09:36:11
906
原创 Qt学习之路
QPainter 用来执行绘制的操作;QPaintDevice 是一个二维空间的抽象,这个二维空间可以由QPainter 在上面进行绘制;QPaintEngine 提供了画笔 painter 在不同的设备上进行绘制的统一的接口。QPaintEngine 类用在 QPainter 和 QPaintDevice 之间,并且通常对开发人员是透明的,除非你需要自定义一个设备,这时候你就必须重新定义 QPaintEngine 了。Qt 的绘图系统允许使用相同的 API 在屏幕和打印设备上进行绘制。
2023-01-29 20:43:34
58
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人