C++
文章平均质量分 95
从0开始的C++学习。
momo小菜pa
momo
展开
-
C++11 线程库
在C++11之前,涉及到多线程问题,都是和平台相关的,比如windows和linux下各有自己的接口,这使得代码的可移植性比较差。C++11中最重要的特性就是对线程进行支持了,使得C++在并行编程时不需要依赖第三方库。而且在原子操作中还引入了原子类的概念。要使用标准库中的线程,必须包含< thread >头文件。函数名功能thread()构造一个线程对象,没有关联任何线程函数,即没有启动任何线程thread(fn,...)原创 2024-07-18 11:26:28 · 778 阅读 · 0 评论 -
C++11 新的类功能&&可变参数模板
0.上篇文章C++11 右值引用和移动语义-CSDN博客1.新的类功能默认成员函数原来C++类中,有6个默认成员函数:1. 构造函数2. 析构函数3. 拷贝构造函数4. 拷贝赋值重载5. 取地址重载6. const 取地址重载最后重要的是前4个(属于深拷贝,后两个用处不大。默认成员函数就是我们不写编译器会生成一个默认的。C++11 新增了两个:移动构造函数和移动原创 2024-07-13 23:45:02 · 1036 阅读 · 1 评论 -
C++11 lambda表达式
捕捉列表描述了上下文中那些数据可以被lambda使用,以及使用的方式传值还是传引用。原创 2024-07-12 15:24:12 · 843 阅读 · 0 评论 -
C++11 右值引用和移动语义
左值是一个表示数据的表达式(如变量名或解引用的指针),原创 2024-06-21 19:28:44 · 665 阅读 · 0 评论 -
C++ map&&ste的封装
关于map和set的封装,底层都是红黑树。C++ 红黑树-CSDN博客RED,BLACK, _kv(kv){}public:else// 新增节点给红色else// parent的颜色是黑色也结束// 关键看叔叔// 叔叔存在且为红,-》变色即可// 继续往上处理else // 叔叔不存在,或者存在且为黑// g// p u// celse// g// p u// cbreak。原创 2024-06-01 15:59:21 · 635 阅读 · 1 评论 -
C++ 红黑树
RED,BLACK, _kv(kv){}private:成员变量:_left_right和_parent分别指向节点的左子节点、右子节点和父节点。_kv是一个pair<K, V>,存储节点的键和值。_col表示节点的颜色,可以是RED或BLACK。构造函数:接收一个pair<K, V>作为参数,初始化节点的键值对,并将节点的颜色初始化为RED。其他指针成员初始化为nullptr。原创 2024-05-26 12:03:19 · 1093 阅读 · 1 评论 -
C++ 实现AVL树
int _bf;// 平衡因子, _kv(kv), _bf(0){}模板参数K和V是两个类型参数,分别表示节点中键(Key)和值(Value)的类型。成员变量_left:指向左子节点的指针。_right:指向右子节点的指针。_parent:指向父节点的指针。注意,有些AVL树实现可能不包括此成员,但在某些情况下,如需要快速向上遍历树时,它是有用的。_kv:一个pair,包含键和值。_bf(平衡因子):用于表示该节点左子树和右子树的高度差。平衡因子的值可以是-1、0或1。原创 2024-05-21 09:11:49 · 797 阅读 · 8 评论 -
C++ map&&set详解
翻译:1. set是按照一定次序存储元素的容器2. 在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。3. 在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行排序。4. set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对子集进行直接迭代。原创 2024-05-12 18:22:13 · 723 阅读 · 0 评论 -
C++ 搜索二叉树
2. KV模型:每一个关键码key,都有与之对应的值Value,即<Key, Value>的键值对。1. K模型:K模型即只有key作为关键码,结构中只需要存储Key即可,关键码即为需要搜索到的值。实际每个节点,就是多了一个与key关联的值,搜索二叉树的实现逻辑只是与key有关。(即当前节点存在),就继续执行循环体。: 如果当前节点的键与给定的键相等,: 如果当前节点的键小于给定的键,: 如果当前节点的键大于给定的键,: 开始一个循环,只要。原创 2024-05-11 14:08:33 · 996 阅读 · 9 评论 -
C++ 模板进阶
【优点】1. 模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生2. 增强了代码的灵活性【缺陷】1. 模板会导致代码膨胀问题,也会导致编译时间变长2. 出现模板编译错误时,错误信息非常凌乱,不易定位错误。原创 2024-04-18 16:47:36 · 545 阅读 · 7 评论 -
C++ queue&& priority_queue&&stack 详解及模拟实现
3.1queue的介绍1. 队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端提取元素。2. 队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列。3. 底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。empty:检测队列是否为空size:返回队列中有效元素的个数front:返回队头元素的引用back:返回队尾元素的引用。原创 2024-04-17 20:23:36 · 1018 阅读 · 6 评论 -
C++ list详解及模拟实现
1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。3. list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。4. 与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率更好。原创 2024-03-21 15:12:37 · 895 阅读 · 5 评论 -
C++ vector详解及模拟实现
1. vector是表示可变大小数组的序列容器。2. 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。3. 本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。原创 2024-03-16 11:56:15 · 1172 阅读 · 8 评论 -
C++ string类详解及模拟实现
当字符串长度小于16时,使用内部固定的字符数组来存放当字符串长度大于等于16时,从堆上开辟空间。原创 2024-03-05 17:09:03 · 985 阅读 · 10 评论 -
C++ 模板(初阶)
class 类模板名// 类内成员定义动态顺序表注意:Vector不是具体的类,是编译器根据被实例化的类型生成具体类的模具public:, _size(0){}// 使用析构函数演示:在类中声明,在类外定义。~Vector();// 注意:类模板中函数放在类外进行定义时,需要加模板参数列表。原创 2024-02-22 13:31:00 · 845 阅读 · 3 评论 -
C++ 内存管理(new&&delete)
new用法的演示(与malloc对比):1.用法上,变简洁了// new 10个int对象malloc创建空间是调用函数的方式,而new则是关键字的方式,方便了很多。2.可以控制初始化// new 1个int对象,初始化成10//在堆上开一个数组,并完成初始化3.自定义类型,开空间+构造函数下面以创建单链表为例:这是单链表的方法:一个节点一个节点的开再看new的方法:直接开空间+构造函数这样就创造出来了三个结点。int _val;{}int _val;{}原创 2024-02-08 10:49:22 · 1289 阅读 · 7 评论 -
C++ 类与对象(下)
定义时不添加static关键字,类中只是声明3. 类静态成员即可用。原创 2024-02-05 17:49:30 · 1110 阅读 · 11 评论 -
C++ 类与对象(const成员)
显然是不可以的,(&d1 类型为const Date* 而 this 是 Date*,此操作放大了d1的权限,所以编译器是不支持的)。我们重载了<和>=两个操作符,,>=操作符设置权限为const,我们可以看到编译器同样是不支持,这种操作也是对权限的放大。这两个运算符一般不需要重载,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需要重载,运行成功,因为非从const对象的权限是要大于const成员函数的,所以是可以调用的)。对比3,这种操作显然是支持的,这是权限的缩小。,表明在该成员函数中。原创 2024-02-04 12:12:31 · 459 阅读 · 1 评论 -
C++ 日期类的实现
日期类的实现将综合前面所学的(类的6个默认成员函数),进一步理解和掌握类的6个默认成员函数。原创 2024-02-03 14:46:46 · 1080 阅读 · 8 评论 -
C++ 类与对象(中)
内置类型就是语言提供的数据类型,如:int/char...,自定义类型就是我们使用class/struct/union等自己定义的类型,看看下面的程序。原创 2024-01-31 16:15:27 · 985 阅读 · 3 评论 -
C++ 类与对象(上)
/ 类体:由成员函数和成员变量组成// 一定要注意后面的分号class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。1. 声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。一般情况下,更期望采用第二种方式。原创 2024-01-29 15:34:33 · 1086 阅读 · 8 评论 -
C++--入门(内联函数&&auto&&基于范围的for循环&&指针空值nullptr)
在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它,大家可思考下为什么?auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。return 10;auto b = a;//auto e;无法通过编译,使用auto定义变量时必须对其进行初始化return 0;【注意】原创 2024-01-25 16:41:49 · 1096 阅读 · 1 评论 -
C++ -- 入门(引用&&)
2. 一个变量可以有多个引用3.引用定义后,不能改变指向。原创 2024-01-24 13:39:24 · 1178 阅读 · 8 评论 -
C++--入门(命名空间&&缺省参数&&函数重载)
C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机界提出了OOP(object oriented programming:面向对象)思想,支持面向对象的程序设计语言应运而生。1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。原创 2024-01-22 16:59:57 · 934 阅读 · 6 评论