- 博客(32)
- 收藏
- 关注
原创 C++STL容器——vector
1. 如果reserve(len)的值 > 当前的capacity(),那么会重新分配⼀块能存len个对象的空间,然后把之前的对象通过 copy construtor复制过来,销毁之前的内存;vector有两个函数,⼀个是capacity(),在不分配新内存下最多可以保存的元素个数,另⼀个size(),返回当前已经存 储数据的个数。如果集合已满,在新增数据的时候,就要分配一块更大的内存,将原来的数据复制过来,释放之前的内存,在插入新增的元素,所以。
2024-02-29 16:58:31
645
原创 C++STL容器——pair
可以看到,pair的底层被定义为一个struct,其所有成员默认为public,两个成员分别是first和second。其中map的元素是pair,pair<const key_type, mapped_type>。insert 对不包含重复关键字容器,插入成功返回pair<迭代器, bool>,其中迭代器指向给定关键字元素,bool指出插入是否成功。pair 容器保存两数据成员用来生成特定类型的模板。例如:可以用来遍历关联容器。
2024-02-29 15:26:46
304
原创 C++线程
要创建线程,我们需要一个可调用的函数或函数对象,作为线程的入口点。在C++11中,我们可以使用函数指针、函数对象或lambda表达式来实现。创建线程后,我们可以使用等待线程完成,或者使用分离线程,让它在后台运行。函数会阻塞主程序,等待线程程序执行完成后才执行主线程。joinable() 会返回一个bool值,会判断一个线程可不可以调用jion函数或者detach函数,如果可以,就会返回真。当在程序中使用join或者detach时,一般会先判断joinable。
2024-02-28 16:29:49
861
原创 C/C++ malloc、new,free、delete 区别
realloc先判断当前的指针所指内存是否有足够的连续空间,如果有,原地扩大可分配的内存地址,并且返回原来的地址指针;如果空间不够,先按照新指定的大小分配空间,将原有数据从头到尾拷贝到新分配的内存区域,而后释放原来的内存区域。malloc则并不知道你在这块内存上要放的数组还是别的东西,反正它就给你一块原始的内存,在给你个内存的地址就完事。使用malloc分配的内存后,如果在使用过程中发现内存不足,可以使用realloc函数进行内存重新分配实现内存的扩充。malloc分配内存失败时返回NULL。
2024-01-28 17:48:15
437
原创 C++关于智能指针的一些常见问题
首先解释指针和引用在C++中都用于间接访问变量,但它们有一些区别:1. 指针是一个变量,它保存了另一个变量得内存地址;引用是另一个变量的别名,与原变量共享内存地址。2. 指针可以被重新赋值,指向不同的变量;引用在初始化后不能更改,始终指向同一个变量。3. 指针可以为nullptr,表示不指向任何变量;引用必须绑定到一个变量,不能为nullptr。4. 使用指针需要对其进行解引用以获取或修改其指向的变量的值;引用可以直接使用,无需解引用。
2024-01-24 23:46:40
1056
原创 C/C++ 容易混淆的指针声明总结
从 p 开始,先与 () 结合,说明 p 是一个函数,然后进入 () 里面,与 int 结合,说明函数有一个整型变量参数。接着再与*结合,说明数组里的元素是指针,最后再与 int 结合,说明指针指向的内容是整型数据。之后再与 () 里的 int 结合,说明函数有一个 int 型的参数,再与最外层的 int 结合,说明函数的返回类型是整型,所以 p 是一个指向有整型参数且返回类型为整型的函数的指针。之后再与 int 结合,说明数组里的元素是整型的,大小是3,所以 p 是一个指向大小为3的int数组的指针。
2024-01-18 16:02:21
496
原创 C++中的面向对象重点总结
功能:多态允许不同类的对象使用相同的接口名字,但具有不同实现的特性,允许将子类类型的指针赋值给父类类型的指针,实现多态有两种方法:1. 覆盖(override):是指子类重新定义父类的。
2024-01-05 15:30:45
1028
原创 I/O 多路转接
I/O 多路转接,为了使用这种技术,先构造一张我们感兴趣的描述符的列表,然后调用一个函数,直到这些描述符中的一个已准备好进行 I/O 时,该函数才返回。poll、pselect 和 select 这3个函数使得我们能够指向 I/O 多路转接。
2023-12-05 23:52:56
816
原创 信号相关的函数
signo 参数是信号名。func 的值是常量 SIG_IGN、常量 SIG_DEL 或当接到此信号后要调用的函数的地址。signal 函数原型说明此函数要求两个参数,返回一个函数指针,而该指针所指向的函数无返回值(void)。第一个参数 signo 时一个整型值,第二个参数是函数指针,它所指向的函数需要一个整型参数,无返回值。signal 的返回值是一个函数地址,该函数有一个整型参数(即最后的(int))。当调用 signal 设置信号处理程序时,第二个参数是指向该函数(也就是信号处理程序)的指针。
2023-12-04 02:57:57
882
原创 进程组与会话的概念
进程组是一个或多个进程的集合。通常,它们是在同一作业中结合起来的,同一进程组中的各进程接受来自终端的各种信号。每个进程组有一个唯一的进程组 ID。进程组 ID 类似于进程 ID,它是一个正整数,并可存放在 pid_t 数据类型中。对于 函数 getpgid 若pid 是 0,返回调用进程的进程组 ID,每个进程组有一个组长进程。组成进程的进程组 ID 等于其进程 ID。进程组组长可以创建一个进程组、创建该进程组中的进程,然后终止。
2023-12-03 22:32:52
346
原创 UNIX 系统中的进程调度相关函数
调度策略和调度优先级是由内核确定的。进程可用通过调整 nice 值选择以更低优先级运行(通过调整 nice 值降低他对 CPU 的占有,因此该进程是“友好的”)。只有特权进程允许提高调度权限。Single UNIX Specification 中 nice 值得范围在 0 ~ (2*NZERO) - 1 之间,有些实现支持 0 ~ 2*NZERO。nice 值越小,优先级越高,这意思是:你越友好,你的调度优先级就越低。NZERO 是系统默认得 nice 值。
2023-12-03 21:37:06
349
原创 关于标准 I/O 流文件的读和写函数
函数 getchar 等同于 getc(stdin)前两个函数的区别是,注:这3个函数在返回下一个字符时,将其 unsigned char 类型转换为 int 类型。因为常量 EOF 经常被设置为 -1,所以不管是出错还是到达文件尾端,这3个函数都返回同样的值。为了区分出错还是到达尾端,需要使用和每个流在 FILE 对象中维护了两个标志:出错标志和文件结束标志。可以使用 clearerr 清楚这两个标志。当从六种读取数据以后,可以调用 ungetc 将字符再压回流中。
2023-12-01 23:06:25
421
1
原创 标准 I/O 函数
对于标准 I/O 库,它们的操作是围绕流(stream)进行的。当用标准 I/O 库打开或创建一个文件时,我们已使一个流与一个文件相关联。
2023-12-01 18:44:31
865
1
原创 常用的 SQL 语句
小括号( )主查询和子查询可以是不同表,只要子查询返回的结果主查询可以使用即可可以在主查询的 where、select、having、from 后都可以放置子查询不可以在主查询的 group by 后面放置子查询(SQL语句的语法规范)强调:在from后面放置的子查询(***) from后面放置是一个集合(表、查询结果)一般先执行子查询(内查询),再执行主查询(外查询);但是相关子查询除外一般不在子查询中使用order by, 但在Top-N分析问题中,必须使用order by。
2023-12-01 00:11:55
857
1
原创 创建和删除目录函数,以及更改当前工作目录函数
用 mkdir 和 mkdirat 函数创建目录,用 rmdir 函数删除目录这两个函数创建一个新的空目录。其中 '.' 和 '..' 目录项是自动创建的。所指定的文件访问权限 mode 由进程的文件模式创建屏蔽字修改。这两个函数经常出现的错误是:指定与文件相同的 mode(只指定读、写权限)。但是,对于目录通常至少要设置一个执行权限位,以允许访问该目录中的文件名。mkdirat 函数与 mkdir 函数类似。
2023-11-30 22:58:17
386
原创 UNIX 文件权限设置的相关函数
umask 函数为进程设置文件模式创建屏蔽字,并返回之前的值。这个函数没有出错返回,它不会出错.其中,参数 cmask 是由 文件模式(mode)的九个权限按位或构成的。上述代码创建了两个文件,创建第一个文件时,umask 值为0,创建第二个时,umask 值禁止所有组和其他用户的访问权限。应用中常常使用设置 umask 值以控制他们所创建文件的默认权限。
2023-11-30 10:01:14
888
原创 UNIX常用的文件操作函数
传统的 UNIX 系统实现在内核中设有缓冲区高速缓存或页高速缓存,大多数磁盘 I/O 都通过缓冲区进行。当我们想文件写入数据时,内核通常先将数据复制到缓冲区中,然后排入队列,晚些时候再写入磁盘。这种方式被称为延迟写。sync 只是将所有修改过的块缓冲区排入写队列,然会就返回,它并不等待实际写操作结束。通常,称为 updata 的系统守护进程周期性地调用(一般每隔 30 秒)sync函数。这就保证了定期冲洗(flush)内核的块缓冲区。命令 sync(1) 页调用 sync 函数。
2023-11-29 17:55:58
379
1
原创 函数 dup 、dup2 和 fcnt1
这两个函数都可用来复制一个现有的文件描述符两函数的返回值:若成功:返回新的文件描述符;若出错,返回-1;dup 返回的新文件描述符一定时当前可用文件描述符中的最小数值。dup2 可以用 fd2 参数指定新描述符的值。如果 fd2 已经打开,则先将其关闭。如若 fd 等于 fd2,则 dup2 返回 fd2,而不关闭它。否则,fd2 的 FD_LOEXEC 文件描述符标志就被清除,这样 fd2 在进程调用 exec 时是打开状态。这两个函数返回的新文件描述符与参数 fd 共享同一个文件表项。
2023-11-29 17:20:14
440
1
原创 C++ 中的 extern
首先明白 C/C++ 中变量的声明和定义是两个不同的概念。声明是指告诉编译器某个符号的存在,在程序变量表中记录类型和名字,而定义则是指为该符号分配内存空间或实现其代码逻辑。凡是没有带 extern 的声明同时也都是定义。而对函数而言,带有 {} 是定义,否则是声明。如果想声明一个变量而非定义它,就在变量名前添加关键字 extern, 且不要显示的初始化变量。// 声明//定义声明变量或函数的存在,但不进行定义,让编译器在链接时在其他源文件中查找定义。当链接器在一个全局变量。
2023-11-22 22:42:51
2496
原创 关于UNIX的文件共享
UNIX系统支持在不同进程间共享打开文件。内核使用3中数据结构表示文件,它们之间的关系决定了在文件共享方面一个进程对另一个进程可能产生的影响。1. 每个进程在进程表中都有一个记录项,记录项中包含一张打开文件描述符表,每个描述符占用一项。与每个文件描述符相关联的是:a. 文件描述标志b. 指向一个文件表项的指针2. 内核为所有打开文件维持一张文件表。每个文件表象包含:a. 文件状态标志(读、写、添写、同步和非阻塞等)b. 当前文件偏移量c. 指向该文件 v 节点表项得指针。
2023-11-22 17:19:41
80
1
原创 UNIX中的文件 I/O
文件描述符对于内核而言,所有打开的文件都通过文件描述符引用。文件描述符是一个非负整数。当打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。
2023-11-22 16:39:27
37
1
原创 C++ 中宏定义(define)和内联函数(inline)和 typedef 的区别
宏定义(#define)和内联函数(inline)都是为了减少函数调用开销和提高代码运行效率而引入的机制,但是它们的实现方式和作用机制略有不同。
2023-11-21 23:04:04
117
原创 C++ 字节对齐和字节序
在C/C++中,字节对齐时内存分配的一种策略。当分配内存时,编译器会自动调整数据结构的内存布局,使得数据成员的起始地址与其自然对齐边界相匹配。字节对齐有助于提高内存访问速度,因为许多处理器都优化了对齐数据的访问。但是,这可能会导致内存中的一些空间浪费。
2023-11-21 22:35:35
130
原创 C++中的 static 和 volatile 的作用
static 修饰全局变量可以将变量的作用域限定在当前文件,使得其他文件无法访问变量。同时,ststic 修饰的全局变量在程序启动时被初始化,生命周期和程序一样长。
2023-11-21 22:10:29
130
原创 QT qmake文件常见变量的含义
qmake 中提供替换函数(replace function)用于在配置过程中处理变量或内置函数的值, “$$” 时替换函数的前缀,后面可以是变量名或 qmake 的一些内置函数。配置文件中 ’#‘ 用于标识注释语句。配置文件中有一些全大写的单词,这是 qmake 配置文件中变量。其中 "$${TARGET}" 就是替换函数,表示用变量TARGET的值替换。当我们向项目中添加文件时,Qt Creator 会自动更新配置文件中的内容。首先Qt项目的配置文件是自动生成的,一般不需要手动修改。
2023-11-21 13:51:39
68
原创 C++基础知识——sizof关键字
sizeof用来计算变量在所占内存的大小,以字节为单位C++整型数据长度标准:short 至少16位int 至少与 short 一样长long 至少32位,且至少与 int 一样长long long 至少64为,且至少与 long 一样长很多系统都使用最小长度,short 为16位即2个字节,long为32位即4个字节,long long位64位即8个字节,int 的长度较为灵活,一般认为 int 的长度为4个字节,与 long 等长.
2023-11-20 22:08:39
104
1
原创 从零开始安装轻量级QtCreat
QT是一个跨平台的应用开发框架,是用C++语言写的一套类库。从Qt5.15开始,Qt的开源版本只提供在线安装软件,没有离线安装软件。好,现在我们开始安装QT平台:window10。
2023-11-19 21:10:11
127
1
原创 Qt Creator 一些常见的设置
Qt Creator 的大部分设置内容在: 点击 “Qt Creator 的 Tools” —> "Exernal" —> "Configure..." 菜单栏会打开选项设置对话框。其中对话框的左侧是可设置的分组内容,点击某一组后,右侧会出现具体的设置界面。
2023-11-19 21:02:51
383
1
原创 UNIX基本知识
我们可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境;我们通常将这种软件称为。内核的接口被称为系统调用;公用函数库构建在系统调用接口之上,应用程序即可使用公用函数库,也可使用系统调用。shell是一个特殊的应用程序,为运行其他应用程序提供了一个接口。
2023-11-19 18:53:18
41
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人