- 博客(30)
- 收藏
- 关注
原创 内核对象中事件,信号量,以及互斥量获取锁的工作原理
事件:用于线程之间的信号通知,主要用于等待某个条件的发生。互斥量:用于线程之间的互斥访问,保证同一时间只有一个线程进入临界区。信号量:用于控制对资源的并发访问,可以允许多个线程同时访问有限数量的资源。每种同步机制都有其特定的使用场景,选择哪种取决于你希望如何控制线程对资源的访问和同步。
2024-10-23 15:00:49
440
原创 C++中常量引用传递
和表示使用常量引用的方式来传递参数,避免了不必要的对象复制,提高了效率。const确保传递的对象在构造函数内部不会被修改,从而增强了代码的安全性和稳定性。通过引用传递较大的对象,避免了按值传递时产生的性能开销。
2024-09-23 14:59:57
1389
原创 C++中(Qt)类与命名空间
是命名空间而非类,用于组织和管理自动生成的UI类和代码。在这个命名空间内,你可以找到由Qt Designer生成的类,这些类定义了用户界面元素和布局。命名空间通常包含自动生成的类和函数,这些类和函数定义了应用程序的用户界面元素。命名空间主要用于管理和组织通过Qt Designer工具生成的用户界面代码。是一个命名空间,用于包含自动生成的用户界面类。命名空间,而是通过引用和实例化这个命名空间内的类来与UI进行交互。本身并不是一个类,它只是一个包含这些类的命名空间。命名空间内生成的类(如。命名空间下的一个类。
2024-09-04 19:35:50
590
原创 C++中无序容器(哈希容器)
和关联式容器一样,无序容器只是一类容器的统称,其包含有4个具体容器,分别为 unordered_map、unordered_multimap、unordered_set以及unordered_multiset。
2024-09-03 23:33:10
343
原创 C++容器之关联式容器
关联容器在存储元素值的同时,还会为各元素额外再配备一个值(又称为“键”,其本质也是一个 C++基础数据类型或自定义类型的元素),它的功能是在使用关联式容器的过程中,如果已知目标元素的键的值,则直接通过该键就可以找到目标元素,而无需再通过遍历整个容器的方式。也就是说,使用关联式容器存储的元素,都是这是和序列式容器最大的不同。除此之外,序列式容器中存储的元素默认都是未经过排序的,而使用关联式容器存储的元素,默认会根据各元素的键值的大小做升序排序。
2024-09-03 19:20:18
612
原创 C++中STL之容器和迭代器
各种数据结构,如Vector,List,Deque,Set,Map,用来存放数据,STL容器是一种Class Template,就体积而言,这一部分很像冰山载海面的比率。扮演容器与算法之间的胶合剂,是所谓的“泛型指针”,共有五种类型,以及其它衍生变化,从实现的角度来看,迭代器是一种将:Operators*,Operator->,Operator++,Operator--等相关操作予以重载的ClassTemplate(模板类)。所有STL容器都附带有自己专属的迭代器。
2024-09-03 16:17:30
2016
原创 函数模板与函数重载对比
函数模板和函数重载是C++中实现多态性和代码复用的两种常见技术,虽然它们有类似的功能,但在使用方式和目的上存在一些关键区别。以下是它们的对比:函数重载:在同一作用域内定义多个函数,它们具有相同的函数名,但参数列表不同(包括参数类型、数量或顺序)。编译器根据调用时传递的参数类型和数量来选择适当的函数。 函数模板:使用模板参数编写一个通用函数,使得该函数可以处理不同的数据类型。在调用时,编译器根据传递的参数类型生成相应类型的函数实例。 函数重载:用于在函数名称相同的情况下,对不同类型或不同数量的参数
2024-09-02 12:23:03
1431
原创 C++中“模板”
C++ 中的模板是一个非常强大的功能,允许程序员编写通用的、可重用的代码。模板可以用于函数和类,使它们能够处理不同类型的数据,而无需为每种类型编写单独的代码。
2024-09-02 12:17:58
154
原创 C++中重载操作符
重载操作符(Operator Overloading)是面向对象编程中的一种技术,它允许程序员为自定义的数据类型(如类或结构体)重新定义或扩展标准操作符(如。
2024-08-22 17:39:32
244
原创 C++中子类对象赋值给父类
在C++中,将子类对象赋值给父类有几种常见方式,包括直接赋值、通过指针或引用进行赋值,以及通过构造函数赋值。在C++中,将子类对象赋值给父类对象时,会发生。
2024-08-21 15:29:10
411
原创 C++之多态
多态是面向对象编程(OOP)的一个重要概念,表示同一接口可以表现出不同的行为。具体来说,多态允许一个函数、方法或运算符有多个不同的实现,并根据调用的上下文(即实际对象的类型)选择合适的实现。从子类和父类的关系来看,多态指的是在继承体系中,子类可以替代父类的位置,从而在程序中表现出不同的行为。
2024-08-16 20:55:36
215
原创 C++之继承
在C++中,继承是一种面向对象编程的特性,它允许一个类从另一个类获得属性和方法,从而实现代码的重用和扩展。继承使得子类可以继承父类(基类)的成员变量和成员函数,同时也可以新增或重写父类的成员。
2024-08-14 21:51:16
163
原创 C语言中指针操纵数组
指针可以直接操控数组,是因为数组名本质上是一个指向数组首元素的指针,指针可以直接访问和修改内存中的数据,并且通过指针传递数组参数更高效。在函数中通过指针操作数组元素,就能直接修改原数组的内容。
2024-08-04 18:19:24
271
原创 c++中类与结构体的区别
默认访问修饰符class的默认访问控制是private,而struct的默认访问控制是public。默认继承方式class的默认继承方式是private,而struct的默认继承方式是public。用途class通常用于实现复杂的面向对象设计,而struct通常用于简单的数据结构。尽管有这些区别,C++ 允许struct和class互换使用,并且在现代 C++ 编程中,结构体和类的界限变得越来越模糊。实际上,你可以使用struct作为类的替代品,特别是当你需要一个简单的数据结构时。
2024-07-31 16:33:00
322
原创 C语言中关于递归与循环的对比
int Mystrlen(char* str)//利用递归自定义求字符串长度return 0;// 当前字符+后续的字符串while (*str)//条件可以换做:*str!='\0'str++;count++;递归更适合分治问题和具有自相似结构的问题。更简洁和自然,但性能和栈空间限制是主要缺点。循环更高效,没有栈空间限制。更适合需要大量迭代的线性问题,但有时会导致代码冗长。在实际编程中,应根据具体问题选择合适的方法。对于具有自相似结构的问题(如树形结构),递归通常更自然;
2024-07-11 14:43:12
315
原创 C语言中函数参数执行顺序
函数,多个参数的压栈顺序由调用约定(Calling Convention)决定。在多数C编译器使用的标准C调用约定(如cdecl)中,参数是从右到左的顺序压入栈中。在C语言中,当一个函数被调用时,函数的参数会被依次压入栈中。右边的getchar()在栈底。左边的getchar()在栈顶。
2024-07-03 14:57:50
282
原创 C语言中链表的插入与删除
在C语言中,链表是一种动态数据结构,允许在内存中灵活地插入和删除节点。链表的每个节点包含数据和指向下一个节点的指针。链表的插入和删除操作是常见的操作,它们通常涉及到调整指针以保持链表的结构。
2024-07-01 20:38:02
361
原创 C语言中字符串常量
字符串常量是C语言中一种表示文本数据的便捷方式,但要注意其只读特性,不应尝试修改字符串常量的内容。通过字符数组可以实现可修改的字符串存储,根据需求选择适当的方式使用字符串。
2024-07-01 16:08:53
557
原创 C语言中宏,typedef以及const
宏可以用来定义常量、简化复杂表达式或函数调用等。宏是在编译之前进行替换的,因此它们并不占用运行时的内存。关键字用于定义常量。它可以应用于变量、指针和函数参数,表示这些数据在程序运行过程中不会被改变。用于为现有的类型定义一个新的类型名称。它可以使代码更加简洁和易读,特别是对于复杂的类型。宏是由预处理器处理的一种文本替换机制,通过。#define + 宏的名字 + 替换的内容。链接 把汇编语言转换为二进制语言。汇编 把高级语言转换为汇编语言。预处理 先处理带#号的文件。位置:主函数里面和外面都可以。
2024-07-01 15:59:55
373
原创 C语言中指针作为参数传递给函数,形参对实参的作用
通过phead这个指针修改它指向的数据(即链表节点的数据)会影响到实参的原因是,指针phead和实参指针head都指向相同的内存地址,因此对该地址上的数据进行修改,两者都能看到这些修改。这就是指针传递机制的关键特性。
2024-06-30 20:40:56
398
原创 【无标题】C语言中getchar()函数
函数会等待用户在标准输入设备(通常是键盘)上输入一个字符。当用户按下一个键,输入的字符会存储在标准输入缓冲区中。缓冲区是一个临时存储区,用于保存用户输入的数据。注意,直到用户按下“回车”键之前,缓冲区中的数据不会被读取。因此,用户必须按下“回车”键来终止输入并让。函数是C标准库中用于从标准输入(通常是键盘)获取一个字符的函数。:如果用户输入了多个字符并按下“回车”键,,直到缓冲区为空或者再次等待用户输入。:当用户按下“回车”键后,函数会返回读取到的字符。
2024-06-29 16:56:03
203
原创 C语言中数据的存储方式
原码表示法是最直观的一种表示方法,用一个符号位来表示正负,剩下的位表示数值的绝对值。计算机系统中,数值一律用补码来储存。负数的补码是通过将其反码加1得到的。反码表示法是将原码的符号位保持不变,其余位按位取反(0变1,1变0)。
2024-06-22 22:59:47
246
1
原创 随机数生成
会结合使用,以确保随机数序列的多样性和不可预测性。并且可以限定输出随机值的范围。函数用于生成一个介于 0 和 RAND_MAX 之间的伪随机整数,其中。的起始点,从而使生成的随机数序列可以被预测或重复。当使用相同的种子时,将生成相同的随机数序列。这对于调试或需要可重复结果的情况很有用。函数用于设置随机数生成器的种子。(注意在该操作系统上得到的随机数一直为:41)它通常被用来生成随机数。所以就达不到随机生成的效果。(这只是其中一次的输出结果)
2024-06-21 16:11:57
309
原创 字符串扩容GetString()
从标准输入中读取一行字符,并将其存储在动态分配的字符串中。如果输入的字符数量超过了最初分配的内存空间,程序会自动扩展该内存空间以适应更多的字符。输入:abcdefg。输出:abcdefg。
2024-06-21 15:10:09
192
原创 C语言中利用scanf()函数跳过内存缓冲区的空白字符
在 C 语言中,清除输入缓冲区通常是为了防止由于之前输入操作留下的多余字符(如换行符)影响后续输入操作。
2024-06-18 17:44:51
676
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人