C++
文章平均质量分 60
Unknown To Known
这个作者很懒,什么都没留下…
展开
-
cmake的基础概念,语法特性,Cmake重要指令,编译过程
基本语法格式:指令(参数1 参数2 …) 参数使用括弧括起来 参数之间使用空格或分号分开指令是大小写无关,参数和变量是大小写相关的变量使用方式取值,但是在IF控制语句中是直接使用变量名,如if{}方式取值,但是在IF控制语句中是直接使用变量名,如if(方式取值,但是在IF控制语句中是直接使用变量名,如if{hello}) 错误的 应该是 if(hello)原创 2023-08-03 09:30:03 · 214 阅读 · 0 评论 -
既然有指针了,为什么 C++ 还搞个引用出来?
对象是指一块能存储数据并具有某种类型的内存空间;一个对象a,它有值和地址&a,运行程序时,计算机会为该对象分配存储空间,来存储该对象的值,我们通过该对象的地址,来访问存储空间中的值;指针:它保存一个值(或 null)的地址,可以检索指向该地址处的值。指针定义时,可以不用初始化;指针可以初始化为NULL,指针的在初始化后, 其地址值仍可以改变, 用于存储另外一个地址;指针p也是对象,它同样有地址&p和存储的值p,只不过,p存储的数据类型是数据的地址。原创 2023-07-06 17:24:49 · 255 阅读 · 0 评论 -
在C++中线程join了之后,主线程会阻塞等待这个线程执行完毕,这个线程那不就和普通函数差不多了吗?
在C++中,。但是,线程和普通函数之间仍然存在一些重要的区别。因此,尽管线程通过join操作会导致主线程阻塞等待,看起来与普通函数的执行类似,但线程仍然具有并发执行、独立的执行环境、共享数据和同步、平行计算能力以及生命周期管理等特性,使其在处理复杂的并发任务时非常有用。原创 2023-07-01 14:16:13 · 1309 阅读 · 1 评论 -
C 语言和 C++ 中的 const 有什么不一样?
在C++中,const成员函数的声明后面会有一个const修饰符,用于表示该成员函数不会修改该类的成员变量。在代码中,printData()函数被声明为只读成员函数,可以在常量对象上调用。而在C++中,const关键字不仅可以用于声明只读变量,还可以用于声明只读成员函数、只读参数、只读引用等。在上面代码中,变量x被声明为只读(不可修改)的常量,因此尝试对其进行赋值操作会导致编译错误。在C++中,可以使用const引用来引用常量对象,这样可以保证无法通过该引用修改对象的状态。原创 2023-06-24 15:30:18 · 87 阅读 · 0 评论 -
如何在c++中实现对onnxruntime推理的量化优化
将FP32的ONNX模型转换为FP16类型需要使用ONNX Runtime C++ API中的一个工具库,称为**“Nuphar”(可扩展的低延迟运算核心)或"DirectML"(Microsoft开发的深度学习库)。,可以通过将输入和权重转换为FP16格式来获得性能提升,因为FP16数据类型需要更少的内存和计算资源。在C++中实现对ONNX Runtime推理的量化优化需要使用。,这些函数可以帮助我们实现。原创 2023-06-10 10:20:10 · 1228 阅读 · 0 评论 -
Linux共享内存 和相关的 shm函数 shmget,shmat,shmdt,shmctl函数
1、共享内存的定义由于进程通信的本质是要让两个不同的进程看到同一份资源,我们可以在物理内存上开辟一块空间,这块空间被称为共享内存,然后让这两个进程通过某种方式都能访问到这块内存,这样的话,两个进程之间就可以通信了。注意:共享内存操作默认不阻塞,如果多个进程同时读写共享内存,可能出现数据混乱,共享内存需要借助其他机制来保证进程间的数据同步,比如:信号量,共享内存内部没有提供这种机制。2、共享内存的特点。原创 2023-06-03 09:32:38 · 1442 阅读 · 0 评论 -
Linux多线程C++版(九) 线程同步和互斥-----线程信号量
【代码】Linux多线程C++版(九) 线程同步和互斥-----线程信号量。1.基本概念2.信号量创建和销毁3.信号量加和减操作4.代码理解信号量5.信号量实例银行账户取款----实现互斥6.信号量实例计算和取结果----实现线程同步原创 2022-12-08 19:42:21 · 1054 阅读 · 2 评论 -
Linux多线程C++版(八) 线程同步方式-----条件变量
1.条件变量基本概念- 互斥锁的缺点是它只有两种状态:锁定和非锁定- 条件变量通过允许线程阻塞和等待另一个线程发送信号的方法弥补了互斥锁的不足- 条件变量内部是一个等待队列,放置等待线程,线程在条件变量上等待和通知,互斥锁用来保护等待队列(对等待队列上锁),条件变量通常和互斥锁一起使用。- 条件变量允许线程等待特定条件发生,当条件不满足时,线程通常先进入阻塞状态,等待条件发生变化。一旦其他的某个线程改变了条件,可唤醒一个或多个阻塞的线程- 具体的判断条件还需要用户给出- 条件变量数据类型 pt原创 2022-12-02 23:06:31 · 784 阅读 · 0 评论 -
Linux多线程C++版(七) 线程互斥方式-----读写锁
1.读写锁基本概念2.读写锁创建和销毁3.读写锁的加锁和解锁4.代码了解读写锁5.线程互斥案例---ATM取钱--使用读写锁 先读后写,读锁成功加上,加写锁堵塞,要等读锁释放。总结特性:读和读互不影响,读和写相互排斥,写和写相互排斥。 都是写锁,第一个写锁加上,第二次写锁失败。 先写后读,写锁成功加上,加读锁失败。 都是读锁,是都成功的。原创 2022-11-30 20:28:46 · 1163 阅读 · 0 评论 -
Linuxd的内核定时器 timer_list
内核定时器是内核用来控制在未来某个时间点(基于jiffies(节拍总数))调度执行某个函数的一种机制,相关函数位于 和 kernel/timer.c 文件中。 当内核定时器定时时间到达时,会进入用户指定的函数,相当于软中断。内核定时器注册开启后,运行一次就不会再运行(相当于自动注销),我们可以重新设置定时器的超时时间,让定时器重复运行。原创 2022-11-26 20:14:31 · 499 阅读 · 0 评论 -
Linux多线程C++版(六) 线程同步和线程互斥
1.线程同步和线程互斥2.线程互斥案例---ATM取钱--没有使用互斥锁3.线程互斥----互斥锁(互斥量)4.互斥锁创建和销毁5.互斥锁上锁和解锁6.线程互斥案例---ATM取钱--使用互斥锁7.互斥锁属性创建和销毁8.互斥锁属性之一---进程共享属性操作9.互斥锁属性之一----互斥锁类型操作10.代码了解互斥锁属性原创 2022-11-26 11:22:54 · 789 阅读 · 0 评论 -
Linux多线程C++版(五) 线程初始化和销毁 pthread_attr_t attr结构定义 pthread_attr_init()函数 pthread_arrt_destroy()函数
【代码】Linux多线程C++版(四) 线程初始化和销毁 pthread_attr_t attr结构定义 pthread_attr_init()函数 pthread_arrt_destroy()函数。原创 2022-11-23 21:16:30 · 930 阅读 · 0 评论 -
Linux多线程C++版(四) 线程清理和控制 pthread_cleanup_push()函数 pthread_cleanup_pop()函数 线程和进程的启动和终止比较
【代码】Linux多线程C++版(四) 线程清理和控制 pthread_cleanup_push()函数 pthread_cleanup_pop()函数 线程和进程的启动和终止比较。原创 2022-11-21 17:44:26 · 436 阅读 · 0 评论 -
Linux多线程C++版(三) 线程终止 pthread_cancel()函数 pthread_exit()函数 pthread_join()函数
由于一个进程中的多个线程共享数据段,因此通常在线程退出后,退出线程所占用的资源并不会随线程结束而释放。如果想要立即释放就必须在主控线程中使用pthread_join函数来等待线程结束,这样线程才会释放干净。pthread_join是主控线程调用的,表示自己会阻塞,直到rabbit线程结束 主控线程方可运行。retval:线程创建时,需要运行函数,pthread_exit 的参数就为这个函数的返回值,可由其他函数和pthread_join来检测获取。作用:谁调用谁阻塞,直到第一个参数的线程执行完毕。原创 2022-11-18 20:50:08 · 1192 阅读 · 0 评论 -
Linux多线程C++版(一) 线程基础 进程和线程关系 线程分类 Linux线程实现 线程表示
线程和进程的关系:线程是属于进程的,线程运行在进程空间内,同时进程所产生的线程共享同一用户内存空间,并当进程退出时该进程所产生的线程都会被强制退出并清除。一个进程至少需要一个线程作为它的指令执行体(一般也称为主线程),进程管理着资源(比如CPU,内存,文件等等),并把线程分配到某个CPU上执行。一般一个进程在最开始的时候是有一个线程,这个线程称为主控线程(主线程),同时可以通过主线程去创建多个线程,这种线程称为子线程。原创 2022-11-15 21:00:55 · 559 阅读 · 0 评论 -
【C++编程语言】之STL常用算法之 算术生成算法 accumlate()函数 fill()函数 集合算法 set_intersection()函数 set_union()函数
1.算术生成算法概念2.accumulate3.fill 向容器中填充指定的元素4.集合算法概念5.set_intersection 求两个容器的交集6.set_union 求两个集合的并集7.set_difference 求两个集合的差集原创 2022-11-12 10:26:57 · 472 阅读 · 0 评论 -
【C++编程语言】之STL常用算法之 拷贝和替换算法 copy()函数 replace()函数 replace_if()函数 swap()函数
1.常用拷贝和替换算法2.copy 将容器指定范围的元素拷贝到另一容器中2.replace 将指定容器内指定范围的旧元素修改为新元素3.replace_if 将区间内满足条件的元素,替换成指定元素4.swap 互换两个容器的元素原创 2022-11-08 20:47:09 · 415 阅读 · 0 评论 -
【C++编程语言】之STL常用算法之 排序算法 sort()函数 random_shuffle()函数 merge()函数 reverse()函数
**算法简介**:- sort 对容器内元素进行排序- random_shuffle 洗牌 指定范围内的元素随机调整次序- merge 容器元素合并 并存储到另一容器中- reverse 反转指定范围的元素原创 2022-11-05 21:08:39 · 336 阅读 · 0 评论 -
【C++编程语言】之STL ---- 函数对象 谓词 一元谓词 二元谓词 内建函数对象 算术仿函数 关系仿函数
函数对象(仿函数)是一个。:STL内建了一些函数对象。功能描述:实现关系对比。原创 2022-11-02 20:11:07 · 350 阅读 · 0 评论 -
【C++编程语言】之 Map和MultiMap容器 基本概念 构造函数 赋值 插入 查找 删除 排序案例
简介:本质:优点:map/multimap区别:功能描述: 对map容器进行构造和赋值操作注意:map中所有元素都是成对出现,插入数据时候要是用对组3.map容器大小和交换功能描述: 统计map容器大小以及交换map容器4.map插入和删除功能描述:map容器进行插入数据和删除数据5.map查找和统计功能描述:对map容器进行查找数据以及统计数据原创 2022-11-01 21:11:07 · 203 阅读 · 0 评论 -
【C++编程语言】之 Set和Multiset容器 基本概念 构造函数 赋值 插入 查找 删除 排序案例
public ://按照年龄 降序 return p1 . m_Age > p2 . m_Age;} };//创建Person对象 Person p1("刘备" , 35);Person p2("曹操" , 45);Person p3("孙权" , 30);Person p4("诸葛亮" , 35);Person p5("司马懿" , 40);Person p6("鲁肃" , 35);it!it ++) {原创 2022-10-29 16:45:30 · 316 阅读 · 0 评论 -
【C++编程语言】之STL常用算法之遍历 查找算法 for_each()函数 transform()函数 find()函数 find_if()函数等
1.概述2.常用遍历算法2.1 for_each2.1 transform3.常用的查找算法3.1 find 查找元素 ---- 内置数据类型查找和自定义数据类型3.2 find_if 按照条件查找元素3.3 adjacent_find 查找相邻重复元素3.4 binary_search 查找指定元素是否存在3.5 count 统计元素个数3.6 count_if 按照条件统计元素个数原创 2022-10-27 16:57:18 · 883 阅读 · 0 评论 -
【C++编程语言】之 list容器 链表 基本概念 list构造函数 list赋值操作 list数据存取 list插入和删除 list反转和排序 list排序案例
List有一个重要的性质,插入操作和删除操作都不会造成原有list迭代器的失效,者在vector是不成立的2.**链表(list)**是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针连接实现的。由于链表的存储方式并不是连续的内存空间,因此链表list中的迭代器只支持前移和后移,属于。节点的组成:一个是存储数据元素的数据域,另一个是存储下一个节点地址的指针域。 将容器中的元素反转,以及将容器中的数据进行排序。 功能描述:对list容器进行数据的插入和删除。原创 2022-10-24 10:54:44 · 650 阅读 · 0 评论 -
【C++编程语言】之 queue容器 队列 queue基本概念 queue常用接口 queue构造函数 queue赋值操作 queue数据存取等
队列中只有对头和队尾才可以被外界使用,因此队列不允许有变量行为。概念:Queue是一种先进先出的数据结构,它有两个出口。队列容器允许从一段新增元素,从另一端移除数据。队列中进数据称为----入队 push。队列中出数据称为----出队 pop。功能描述:队列容器常用的对外接口。原创 2022-10-21 15:40:22 · 1052 阅读 · 0 评论 -
【C++编程语言】之 stack容器 栈 基本概念 stack常用接口 stack构造函数 stack赋值操作 stack数据存取
栈中进入数据称为----入栈 push 栈中弹出数据称为----出栈 pop。栈中只要顶端的元素才可以被外界使用,因此栈不允许有变量行为。概念:stack是一种先进后出的数据结构,它只有一个出口。原创 2022-10-20 22:44:39 · 272 阅读 · 0 评论 -
【C++编程语言】之vector容器和deque容器具体使用案例 -------- 10名评委给5位选手打分,去除评委的最高和最低分取平均分
有5名选手,选手ABCDE,10个评委分别对每一名选手打分,去除评委的最高和最低分取平均分。1. 创建五名选手,放到vector容器中2. 遍历vector容器,取出来每一个选手,执行for循环,可以把10评分存到deque容器中3. sort算法对deque容器中分时排序,去除最高和最低4. deque容器遍历一遍,累计总分5. 获取平均分原创 2022-10-16 09:51:48 · 137 阅读 · 0 评论 -
【C++编程语言】之deque容器 基本概念 构造函数 赋值 容量判断 大小改变 插入 删除 数据存取 排序
中控器维护的是每个缓冲区的地址,使得使用deque时。 双端数组,可以对头端或者尾端进行插入删除操作。,维护每段缓冲区中的内容,缓冲区中存放真实数据。 利用算法实现对deque容器进行排序。deque容器的迭代器也是支持随机访问的。 向deque容器中插入和删除数据。 deque容器的大小进行操作。 对deque中的数据的存取操作。 给deque容器进行赋值。 deque容器构造。原创 2022-10-05 21:52:29 · 352 阅读 · 0 评论 -
【C++编程语言】之vector容器 基本概念 构造函数 赋值 容量判断 大小改变 插入 删除 数据互换 预留空间
并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝到新空间,释放原空间。 不同之处在于数组是静态空间,而vector可以。vector容器的迭代器是支持随机访问的迭代器。 减少vector在动态扩展时的扩展次数。 对 vector容器进行插入,删除操作。 对 vector容器的容量和大小操作。 对vector中的数据的存取操作。 实现两个容器元素进行互换。 给vector容器赋值。 vector数据结构和。 创建vector容器。原创 2022-10-04 21:13:02 · 565 阅读 · 0 评论 -
【C++编程语言】之string容器 基本概念 构造函数 赋值 拼接 查找 替换比较 插入 删除 子串获取
例如:查找find 拷贝copy 删除delete 替换replace 插入insert。string管理char*所分配的内存,不用担心复制越界和取值越界,由类内部进行负责。 等于 返回值为0 大于返回值为1 小于返回值为-1。 字符串比较是按照字符的ASCLL码进行对比。string类内部封装了很多成员方法。原创 2022-09-29 21:24:32 · 704 阅读 · 0 评论 -
【C++编程语言】严重性 代码 说明 项目 文件 行 禁止显示状态 错误 C3848 具有类型“const MyCompare”的表达式会丢失一些 const-volatile 限定符以调用“bool
严重性 代码 说明 项目 文件 行 禁止显示状态错误 C3848 具有类型“const MyCompare”的表达式会丢失一些 const-volatile 限定符以调用“bool MyCompare::operator ()(int,int)” Project02 E:\develop\visual studio\visual studio\VC\Tools\MSVC\14.32.31326\include\xutility 1451原创 2022-09-28 20:42:38 · 1656 阅读 · 5 评论 -
【C++编程语言】之 STL初始 基本概念 六大组件 容器 算法 迭代器
如何在vector中存放自定义数据类型,并打印输出# include # include //vector 容器存放自定义数据类型 class Person {public :} };//vector 容器存放自定义数据类型 void test01() {//创建了一个vector容器,用于存放Person vector < Person > v;"张三" , 10 };"王超" , 20 };"满焊" , 50 };原创 2022-09-27 22:19:41 · 190 阅读 · 0 评论 -
【C++编程语言】之 文件操作
程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放 通过文件可将数据持久化 C++中对文件操作需要包含头文件文件流: 1.文本文件 文件以文本的ASCLL码形式存储在计算机中 2.二进制文件 文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂他们 1.ofstream 写操作 2.ifstream 读操作 3. fstream 读写操作。原创 2022-09-24 16:42:38 · 899 阅读 · 0 评论 -
【C++编程语言】之 多态的基本概念 ,纯虚函数和抽象类,虚析构和纯虚析构
利用多态技术实现案例,提供抽象制作饮品的基类,提供子类制作咖啡和茶叶。 2.动态多态的函数地址晚绑定 ------- 运行阶段确定函数地址。在多态中,通常父类中虚函数的实现是毫无意义的,主要都是调用子类重写的内容。 1.静态多态的函数地址早绑定 ------ 编译阶段确定函数地址。 1.静态多态:函数重载,运算符重载属于静态多态,复用函数名。重写:函数返回值类型,函数名,参数列表,完全一致成为重写。 2.子类必须重写抽象类中的纯虚函数,否则也属于抽象类。原创 2022-09-21 17:29:42 · 527 阅读 · 0 评论 -
【1 day】C++算法练习 剑指Offer 09 30
**用两个栈实现一个队列,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )**原创 2022-09-20 19:23:20 · 409 阅读 · 0 评论 -
【C++编程语言】之 加号 左移 递增 赋值 关系 函数调用 的 运算符重载
运算符重载概念:对已有的运算符进行定义,赋予另外一种功能,以适应不同的数据类型。运算符重载,也可以发生函数重载。 作用:重载关系运算符,可以让两个自定义类型对象进行对比操作。 2.由于重载后使用方式非常想函数的调用,因此称为仿函数。 1.对于内置的数据类型的表达式的运算符是不可以改变的。作用:通过重载递增运算符,实现自己定义整型数据的输出。 3.默认拷贝构造函数,对属性进行值拷贝。 1.默认的构造函数(无参,函数体为空) 2.默认的析构函数(无参,函数体为空)原创 2022-09-19 10:25:36 · 436 阅读 · 0 评论 -
【C++编程语言】之 全局函数做友元 类做友元 成员函数做友元
生活中你的家有客厅(public),有你的卧室(private)。客厅所有来的客人都可以进去,但是你的卧室是私有的,也就是说只有你能进去,但是呢,你也可以允许你的好闺蜜好基友进去。在程序里,有些私有属性,也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术。友元的目的就是让一个函数或者类访问另一个类中私有成员。 1.全局函数做友元。 3.成员函数做友元。原创 2022-09-14 15:21:42 · 324 阅读 · 0 评论 -
【C++编程语言】之C++对象模型和this指针
C++中的成员变量和成员函数是分开存储的,每一个非静态变量成员函数只会诞生一份函数实例,也就是说多个同类型的对象会共用一块代码。 C++中空指针也是可以调用成员函数的,但是也要注意有没有用到this指针,如果用到this指针,需要加以判断保证代码健壮性。 在C++中,类内的成员变量和成员函数分开存储,只有非静态成员变量才存放类的对象内存。 当this所属的函数被p1调用,那么this这个指针就指向p1所属对象。 C++通过提供特殊的对象指针,this指针,解决上述问题。原创 2022-09-09 17:32:38 · 379 阅读 · 0 评论 -
【C++编程语言】之类和对象---静态成员
静态成员就是在成员变量和成员函数前加上关键字static,成为静态成员。 2.静态成员函数只能访问静态成员变量。 2.在编译阶段分配内存(全局区) 1.所有对象共享同一个函数。 1.所有对象共享同一份数据。 3.类内声明,类外初始化。 1.静态成员变量,有访问权限。 2.静态成员函数,有访问权限。原创 2022-09-08 15:46:18 · 364 阅读 · 0 评论 -
【C++编程语言】之类和对象---类对象作为类成员
构造时:是先创建手机类对象,再创建人类对象。所以当类对象作为类成员时,在创建该类时,是先创建该类中的类成员对象,然后再创建该类对象。析构是:是先注销人类对象,在注销手机类对象。原创 2022-09-07 19:57:03 · 255 阅读 · 0 评论 -
【C++编程语言】之类和对象---对象初始化和清除
C++利用了构造函数和析构函数解决上述问题,这个函数将会被编译器自动调用,完成对象初始化和清除工作。: 当对象p2释放内存是会把堆区的内存也一起释放,但是当轮到对象p1是否内存是,堆区的内存已经释放了,以此造成错误。 1.如果用户定义有参构造函数,c++不提供默认无参构造,但会提供默认拷贝构造。:主要作用于创建对象时为对象的成员属性赋值,构造函数有编译器自动调用,无需手动调用。 4.程序在调用对象时候会自动调用构造,无需手动调用,而且只调用一次。原创 2022-09-03 15:45:26 · 1167 阅读 · 0 评论