
C++
文章平均质量分 74
C++
走过,莫回头
这个作者很懒,什么都没留下…
展开
-
常用STL的操作以及特点
STL 提供了强大的数据结构和算法库,使得开发者可以快速、高效地解决许多常见的问题。每种容器和算法。原创 2024-10-12 09:45:56 · 665 阅读 · 0 评论 -
在 POSIX(可移植操作系统接口)系统中,共享内存通信shm_open
是一个用于在 POSIX(可移植操作系统接口)系统中创建和打开共享内存对象的系统调用。共享内存是一种进程间通信(IPC)机制,允许多个进程访问同一个内存段,从而实现数据的快速交换和同步。的共享内存对象,将其大小设置为 4096 字节,然后将其映射到进程地址空间。我们向共享内存中写入一段字符串并打印出来,最后取消映射并删除共享内存对象。在这个示例中,我们创建了一个名为。原创 2024-08-06 16:15:31 · 637 阅读 · 0 评论 -
动态加载第三方库——dlopen
dlopen是一个 POSIX 标准的函数,用于在程序运行时动态加载共享库(动态库)并返回一个句柄,以便后续对库中函数的调用。在 C 语言中,使用dlopen函数可以实现动态加载和调用动态库中的函数,这在插件系统或者需要动态加载库的情况下非常有用。原创 2024-08-02 11:05:37 · 1082 阅读 · 0 评论 -
C++ 互斥量mutex
C++ 互斥量mutex前言一、互斥量的用法1.lock( )、unlack( )2.lock_guard类模板二、死锁三、lock函数模板四、总结前言 互斥量的存在就是为了保护多线程中数据的安全。一、互斥量的用法1.lock( )、unlack( )#include<iostream>#include<list>#include<thread>#include<mutex>using namespace std;class A{原创 2021-05-11 17:50:55 · 1093 阅读 · 0 评论 -
传递临时对象作为线程参数时注意事项
传递临时对象作为线程参数时注意事项前言一、例子二、当定义参数类型作为参数时修改:总结:前言 当在传递临时对象作为线程的参数时,并且该线程执行了函数detach()分离主线程。那么在主线程中创建的临时变量作为分离线程的参数时,在分离线程就会失效,因为当主线程结束时,就会将主线程创建的对象释放。那么该怎么处理呢?一、例子#include<iostream>#include<thread>using namespace std;void myprintf(const原创 2021-04-24 23:14:06 · 838 阅读 · 3 评论 -
尽量使用const、enum、inline来替换#define
尽量使用const、enum、inline来替换#define前言一、const替代#define二、enum替代#define三、inline替代#define总结前言 因为“#define”并不是语言的一部分,所以在一些情况下,“#define”并不是一个最佳的选择,甚至无出现意想不到的报错。一、const替代#define 由于 #define 不是语言的一部分,所以也许在编译器开始处理源码之前就被预处理器移走了,于是就没有进入记号表内,所以在一些不够优秀的编译器内会报错,并且也很难对原创 2021-04-03 12:43:35 · 1051 阅读 · 0 评论 -
C++转型操作符(More Effective C++)
C++转型操作符前言一、static_cast?二、const_cast?三、dynamic_cast?四、reinterpret_cast?总结前言 在C++中,为实现不同类型间的转换,C++定义了四个类型转换操作符static_cast, const_cast, dynamic_cast, 和 reinterpret_cast。 下面介绍不同操作符的使用。一、static_cast? static_cast 用于平常数值类型的转换,例如:int、double、float等 书写方原创 2021-03-29 16:19:03 · 298 阅读 · 0 评论 -
指针和引用的适用情况(More Effective C++)
指针和引用的适用情况指针和引用不同的地方一、操作符的不同?二、对象不同?1.指针可设为NULL,引用不可设为NULL2.对象是否可变总结指针和引用不同的地方1. 操作符的不同 2. 对象不同一、操作符的不同?指针用操作符“*”和“->”引用使用操作符“. ”二、对象不同?1.指针可设为NULL,引用不可设为NULL代码如下(示例):char *pc = 0; // 设置指针为空值char& rc = *pc; // 让引用指向空值 让引用指向空值,毫无疑问。.原创 2021-03-27 20:26:46 · 266 阅读 · 0 评论 -
sizeof()和strlen()
sizeof()和strlen()sizeof()是计算字符串的长度,strlen()是计算有效字符串的长度,即‘\0’之前的字符数。例如1:char str2[] = "abcde";printf("%d\n", sizeof(str2));printf("%d\n", strlen(str2));结果:65字符数组例如2:char str1[] = { 'a','b','c','d','e','\0','f' };printf("%d\n", sizeof(str1));原创 2020-07-25 21:52:04 · 179 阅读 · 0 评论 -
指针与字符串常量
指针与字符串常量选择为真的表达式:char str1[] = “abc”;char str2[] = “abc”;const char str3[] = “abc”;const char str4[] = “abc”;const char *str5 = “abc”;const char *str6 = “abc”;char *str7 = “abc”;char *str8 = “abc”;A、str1 == str2B、str3 == str4C、str5 =原创 2020-07-25 18:04:07 · 4761 阅读 · 2 评论 -
字符串和数组和矩阵笔记
字符串和数组字符串字符串是以‘\0’为结束符;sizeof()和strlen()的不同sizeof()表示的大小包括‘\0’;而strlen()表示的大小不包括‘\0’,只计算‘\0’前面元素的大小 char str[] = "ABCDEFG"; int len=strlen(str); int lens=sizeof(str); printf("%d\n", len); printf("%d\n", lens);输出结果为:78当字符串空间定义了大小时: cha原创 2020-07-23 11:16:52 · 348 阅读 · 0 评论 -
指针与数组关系笔记
指针与数组指针初始化时注意事项1.不能使用未经赋值的指针变量进行间接引用int *p;*p=100; /*指针变量P未经赋值*/2.不能通过指定具体地址的方式对内存单元进行间接引用int *p;p=200; /*不能直接指定内存单元的地址*/3.两个类型不同的指针间,不能直接赋值int a,*p;float x,*q;p=&x;q=&a; /*指针的类型不同,不能直接赋值*/指针与一维数组1.如原创 2020-07-23 10:32:08 · 181 阅读 · 0 评论 -
C++中字符类型的转化
C++中字符类型的转化int转换成stringⅠ、to_string函数c++11标准增加了全局函数std::to_string:string to_string (int val);string to_string (long val);string to_string (long long val);string to_string (unsigned val);string to_string (unsigned long val);string to_string (un原创 2020-07-21 17:52:02 · 336 阅读 · 0 评论 -
static和const关键字的作用、c++中四种cast转换、C/C++ 中指针和引用的区别
static关键字至少有下列n个作用:全局静态变量在全局变量前加上关键字static,全局变量就定义成一个全局静态变量.静态存储区,在整个程序运行期间一直存在。初始化:未经初始化的全局静态变量会被自动初始化为0(自动对象的值是任意的,除非他被显式初始化);作用域:全局静态变量在声明他的文件之外是不可见的,准确地说是从定义之处开始,到文件结尾。局部静态变量在局部变量之前加上关键字static,局部变量就成为一个局部静态变量。内存中的位置:静态存储区初始化:未经初始化的全局静态变量原创 2020-07-21 17:35:30 · 309 阅读 · 0 评论 -
C++ 常用的八种排序方法
C++ 常用的八种排序方法稳定性:排序后 2 个相等键值的顺序和排序之前它们的顺序相同插入排序:思想:(类似打扑克时的排序方法)将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)优点:稳定,快...原创 2020-05-03 12:22:11 · 7583 阅读 · 3 评论 -
C++ STL—resize,自定义类型,没有合适的默认构造函数可用????
问题: 在使用STL容器盛放自定义数据类型时,会报错:没有合适的默认构造函数可用?????例子:#include<iostream>#include<string>#include<vector>#include<algorithm>using namespace std;class person{public: pe...原创 2020-04-13 22:04:03 · 902 阅读 · 1 评论 -
C++ 之STL的常用算法
C++ 之STL的常用算法概述:算法主要是由头文件组成。是所有STL文件中最大的一个,范围涉及到比较、交换、查找、遍历操作、复制、修改等等体积小,只包括几个在序列上面进行简单数学运算的模板函数定义了一些模板类,用以声明函数对象遍历算法for_each(); //遍历容器transform(); //搬运容器到另一个容器中查找算法find(); ...原创 2020-04-10 00:14:22 · 200 阅读 · 0 评论 -
C++ 之 函数对象
函数对象概念:重载函数调用操作符的类,其对象称为函数对象函数对象使用重载的()时,行为类似函数调用,也叫仿函数本质:函数对象(仿函数)是一个类,不是一个函数函数对象使用函数对象在使用时,可以像普通函数那样调用,可以有参数,可以有返回值class myadd{public: int operator()(int a,int b) { return a + b; ...原创 2020-04-07 13:50:47 · 2908 阅读 · 0 评论 -
C++ STL标准模板库——map和multimap
C++ STL标准模板库——map和multimap基本概念map中所有元素都是pairpair中第一个元素为key(键值),起索引作用,第二个元素为value(实值)所有元素都会根据元素的键值自动排序map和multimap属于关联式容器,底层结构是用二叉树实现优点:可以根据key值快速找到value值map和multimap的区别:map不允许容器中有重复key值元...原创 2020-04-05 23:28:39 · 244 阅读 · 0 评论 -
C++ STL标准模板库——set和multiset
C++ STL标准模板库——set和multiset基本概念所有元素都会在插入时自动排序set和multiset属于关联式容器,底层结构是用二叉树实现set和multiset的区别:set不允许容器中有重复的元素multiset允许容器中有重复的元素void myprintf(set<int> &s){ for (set<int>::itera...原创 2020-04-05 00:37:04 · 286 阅读 · 0 评论 -
C++ STL标准模板库——list
C++ STL标准模板库——list基本概念链表(list)的组成:有一系列的结点组成结点的组成:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域由于链表的存储方式并不是连续的内存空间,因此链表中的迭代器只支持前移和后移,属于双向迭代器list优点:采用动态存储分配,不会造成内存浪费和溢出链表执行插入和删除操作十分方便,修改指针即可,不需要移动大量元素list缺...原创 2020-04-04 23:49:59 · 716 阅读 · 0 评论 -
C++ STL标准模板库——stack和queue
C++ STL标准模板库——stack和queuestack基本概念stack(栈)是一个先进后出的数据结构,它只有一个出口。栈中只有顶端元素才可以被外界使用,因此栈不可以有遍历行为。stack常用接口构造函数:stack stk;//默认构造形式stack(const stack &stk);//拷贝构造赋值操作:只有操作符 = ;数据的存取:pus...原创 2020-04-04 22:36:04 · 221 阅读 · 0 评论 -
C++ STL标准模板库——deque
C++ STL标准模板库——dequedeque基本概念deque是双端数组,可以对头端和尾端进行插入和删除操作deque和vector的区别:vector对于头端的插入删除效率低,数据量越大效率越低deque相对而言,对头部的插入删除速度比vector快vector访问元素时的速度会比deque快deque的内部原理: deque内部有个中控器,维护每段缓冲区中的内容,缓冲...原创 2020-04-04 22:05:21 · 275 阅读 · 0 评论 -
C++ STL标准模板库——vector
C++ STL标准模板库——vectorvector基本概念vector的数据结构和数值非常相似,也称为单端数组,不同之处在于数组是静态空间,而vector可以动态扩展。动态扩展:并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间。vector容器的迭代器是支持随机访问的迭代器。即 v.begin()+i 迭代器可以这样访问#include<vec...原创 2020-04-04 18:25:22 · 266 阅读 · 0 评论 -
C++ STL标准模板库——string
C++ STL标准模板库STL即标准模板库。STL从广义上分为:容器、算法和迭代器。容器和算法是通过迭代器进行无缝连接。STL六大组件STL分为六大组件,分别是:容器、算法、迭代器、仿函数、适配器(配接器)和空间配置器。容器:各种算法结构,如vector、list、deque、stack、queue、set、map等用来存放数据算法:各种常用算法,如sort、find、copy、f...原创 2020-04-04 16:40:22 · 278 阅读 · 0 评论 -
C++ 模板template
C++ 模板C++另一种编程思想称为泛型编程,主要利用的技术就是模板。C++提供了两种模板机制:函数模板和类模板。函数模板作用:建立一个通用函数,其函数返回值类型可以不具体的制定,用一个虚拟的类型来代表。语法:template<typename T>template------声明创建模板typename------表明后面的符号是一种数据类型,可以用class代替...原创 2020-03-26 22:43:02 · 180 阅读 · 0 评论 -
C++ 多态
C++ 多态多态分为两类:静态多态:函数重载和运算符重载,复用函数名动态多态:派生类和虚函数实时运行时多态静态多态和动态多态的区别:静态多态的函数地址早绑定——编译阶段确定函数地址动态多态的函数地址晚绑定——运行阶段确定函数地址例子:#include<iostream>#include<string>using namespace std;...原创 2020-03-09 23:57:06 · 163 阅读 · 0 评论 -
C++ 继承
C++ 继承为什么需要继承?当我们编写多个类时,在这多个类中有个性的同时还有一些共性,为了避免这些共性在每个类中重复编写,这时就需要继承的技术,减少重复的代码。继承语法:class 子类 : 继承方式 父类子类又称派生类 父类又称基类继承方式:继承方式有三种:public protected 和 private无论是哪种继承方式,父类中的私有...原创 2020-03-08 23:40:05 · 128 阅读 · 0 评论 -
C++ 运算符重载
C++ 运算符重载为什么需要运算符重载呢?在我们平时编写的时候系统会自动识别int double float和string等类型,但是,当我们自己定义了一个数据类型时,这时,编译器就不知如何操作了,所以这时就要用到运算符重载了,重载一个适合自己创建类型的运算符。下面简单的介绍一下几类的运算符重载加号运算符重载:#include<iostream>#include...原创 2020-03-05 22:49:18 · 137 阅读 · 0 评论 -
C++ 友元
C++ 友元目的:就是让一个函数或类,访问另一个类中的私有成员友元的关键字:friend友元的三种实现:全局函数做友元类做友元成员函数做友元全局函数做友元: 将全局函数的定义放入类中,前面加friend关键字#include<iostream>#include<string>using namespace std;class people{...原创 2020-02-29 17:27:33 · 220 阅读 · 0 评论 -
C++ this指针和const修饰的成员函数
C++ this指针this指针指向被调用的成员函数所属的对象this指针的用途: 当形参和成员变量同名时,可以用this指针区分 在类的非静态成员函数中返回对象本身,可使用*this 例子解释: 1.当形参和成员变量同名时,可以用this指针区分,这时this指针指向的时成员函数所属的对象,如果 class peoper实例化对象为p1,那么this指针指向的就是...原创 2020-02-27 22:44:33 · 270 阅读 · 0 评论 -
C++结构函数和析构函数
C++结构函数和析构函数 结构函数和析构函数就是分别用于对象的初始化和清理,在我们不提供结构函数和析构函数时,编译器会提供结构函数和析构函数,但是是空实现。结构函数 主要用于在创建对象时,为对象的成员属性赋值,结构函数由编译器自动调用,无需手动调用结构函数又分为:无参结构函数、有参结构函数和拷贝结构函数 无参结构函数:即结构函数无参数 类名(){ }; 有参...原创 2020-02-26 12:44:08 · 698 阅读 · 0 评论 -
C++ 程序的内存模型和New运算
C++ 程序的内存模型和New运算C++在程序运行时,会将内存分为四个区域:代码区:存放函数体的二进制代码,由操作系统进行管理的全局区:存放全局变量和静态变量以及常量栈区:由编译器进行自动分配释放,存放函数的参数值和局部变量等堆区:由程序员分配和释放,若程序员不释放,程序结束时由此操作系统回收程序执行前,划分两个区域:代码区:存放CPU执行的机器命令代码区是共享的,共享的目的...原创 2020-02-22 16:07:09 · 192 阅读 · 0 评论 -
C++程序运行结构
C++程序运行结构最基本的三种程序运行结构:顺序结构,选择结构,循环结构顺序结构就是程序从上至下逐条运行,不发生跳转。选择结构就是根据条件否满足,有选择的执行相应的代码1.if语句if语句有三种结构://..................单行格式if语句 if(判断条件) { 程序 }//..................多行格式if语句...原创 2020-02-19 19:12:26 · 299 阅读 · 0 评论 -
C++ const修饰指针
C++ const修饰指针const修饰指针有三种情况:const修饰指针 ----------- 常量指针const修饰常量 ------------ 指针常量const即修饰指针又修饰常量1.常量指针形式:const int * p = &a在使用时注意: const int * p = &a; //*p = 60;错误 p = &a...原创 2020-02-19 18:23:17 · 289 阅读 · 0 评论 -
C++ 值传递和地址传递和引用传递
C++ 值传递和地址传递在我们在函数间数据传递的时候会出现,在函数中数据处理的间而过理想的,但在主函数中数据并没有发生变化。具体详情如下:在数据传递时,分为值传递和地址传递;值传递:在函数调用时实参将数据传入形参#include<iostream>#include<string>using namespace std;void swap(int x, int ...原创 2020-02-19 17:50:24 · 2946 阅读 · 0 评论