
C++基础
文章平均质量分 81
C++学习
XYLoveBarbecue
中科院研究生在读,未来想当技术大佬~~~
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++ 哈希详解 (完整代码)
中,元素关键码与其存储位置之间没有对应的关系,因此在搜索的效率取决于搜索过程中元素的比较次数例如 :数据集合{1,7,6,4,5,9}哈希函数设置为:hash(key) = key % capacity;capacity为存储元素底层空间总的大小。用问题:按照上述哈希方式,向集合中插入元素44,会出现什么问题?原创 2025-03-16 01:17:19 · 758 阅读 · 0 评论 -
C++ unordered系列关联式容器
unordered_map的文档介绍1. unordered_map是存储键值对的关联式容器,其允许通过keys快速的索引到与 其对应的value。2. 在unordered_map中,键值通常用于惟一地标识元素,而映射值是一个对象,其内容与此 键关联。键和映射值的类型可能不同。3. 在内部,unordered_map没有对按照任何特定的顺序排序, 为了能在常数范围内 找到key所对应的value,unordered_map将相同哈希值的键值对放在相同的桶中。原创 2025-03-15 21:21:19 · 799 阅读 · 0 评论 -
C++ 使用红黑树的实现及迭代器完成对set和map的封装
【代码】C++ 使用红黑树的实现及迭代器完成对set和map的封装。原创 2025-03-10 16:56:47 · 263 阅读 · 0 评论 -
C++ 红黑树(详解 完整代码)
C++ AVL树(详解 完整代码)-CSDN博客// 这里也可以用struct// struct默认是公有的,class默认私有所以加上publicpublic:colour col;, _kv(kv), col(RED){}在节点的定义中,为什么要将节点的默认颜色给成红色的?因为插入一个红色结点 只影响当前路径,插入黑色这条路径的黑色节点数量变化,那么为了满足条件,别得路径也要修改,极其麻烦// 如果为空树,创建新节点即可。原创 2025-03-10 13:42:55 · 1007 阅读 · 0 评论 -
C++ AVL树(详解 完整代码)
{}// 该节点的左孩子// 该节点的右孩子// 该节点的双亲T _data;int _bf;// 该节点的平衡因子。原创 2025-03-07 01:09:46 · 788 阅读 · 0 评论 -
C++ map和set(详解) 包括multiset和multimap(详解)
在前面,我们已经接触过STL中的部分容器,比如:vector、list、deque、forward_list(C++11)等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身。那什么是关联式容器?它与序列式容器有什么区别?关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是结构的键值对,在数据检索时比序列式容器效率更高set文档介绍翻译:1. set是按照一定次序存储元素的容器。原创 2025-03-05 20:59:48 · 681 阅读 · 0 评论 -
C++ 迭代器类型
单向迭代器(forward iterator)双向迭代器( bidirectional iterator )随机迭代器(random access iterator )原创 2025-03-04 16:39:16 · 172 阅读 · 0 评论 -
C++ 搜索二叉树(二叉搜索树) 详解
情况b:删除该结点且使被删除节点的双亲结点指向被删除节点的左孩子结点--直接删除 情况c:删除该结点且使被删除节点的双亲结点指向被删除结点的右孩子结点--直接删除 情况d:在它的右子树中寻找中序下的第一个结点(关键码最小),用它的值填补到被删除节点 中,再来处理该结点的删除问题--替换法删除。对有n个结点的二叉搜索树,若每个元素查找的概率相等,则二叉搜索树平均查找长度是结点在二 叉搜索树的深度的函数,即结点越深,则比较次数越多。10. 二叉树的后序遍历 ,非递归迭代实现。原创 2025-02-26 10:57:56 · 556 阅读 · 0 评论 -
C++ 多态详解
需要声明的:本文中的代码及解释都是在vs2013下的x86程序中,涉及的指针都是4bytes。如果要其他平台下,部分代码需要改动。比如:如果是x64程序,则需要考虑指针是8bytes问题等等多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了 Person。Person对象买票全价,Student对象买票半价。那么在继承中要构成多态还有两个条件1.必须通过基类的指针或者引用调用虚函数2.被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。原创 2025-02-19 17:14:36 · 1088 阅读 · 0 评论 -
C++ 继承详解
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。public:protected:// 姓名// 年龄// 继承后父类的Person的成员(成员函数+成员变量)都会变成子类的一部分。这里体现出了// Student和Teacher复用了Person的成员。原创 2025-02-17 21:32:34 · 605 阅读 · 0 评论 -
C++ 模板详解
一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链 接起来形成单一的可执行文件的过程称为分离编译模式。原创 2025-02-11 20:51:08 · 715 阅读 · 0 评论 -
C++ 迭代器失效问题
底层实现vector、deque底层都是用了连续空间,所以虽然++iter迭代器了,但是erase(tempit)以后底层是连续空间,删除会挪动数据,最终导致iter意义变了,已失效了。而list,不是连续空间,删除以后tempIt虽然失效了,但是不影响iter。原创 2025-01-23 19:23:38 · 205 阅读 · 0 评论 -
C++ priority_queue(优先级队列)
priority_queue的介绍1. 优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。2. 此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元 素)。3. 优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特 定的成员函数来访问其元素。元素从特定容器的“尾部”弹出,其称为优先队列的顶部。4. 底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。原创 2025-01-22 20:46:53 · 497 阅读 · 0 评论 -
C++ stack和queue(栈和队列)详解
stack文档介绍1. stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行 元素的插入与提取操作。2. stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定 的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。3. stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下 操作:empty:判空操作back:获取尾部元素操作。原创 2024-12-26 10:36:04 · 847 阅读 · 0 评论 -
C++ List详解
1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向 其前一个元素和后一个元素。3. list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。4. 与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率更好。原创 2024-12-24 09:44:52 · 2643 阅读 · 0 评论 -
C++ vector的模拟实现
【代码】C++ vector的模拟实现。原创 2024-12-21 22:25:53 · 249 阅读 · 0 评论 -
C++ vector详解
vector的文档介绍1. vector是表示可变大小数组的序列容器。2. 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素 进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自 动处理。3. 本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。原创 2024-12-21 22:21:38 · 1461 阅读 · 0 评论 -
C++ 模板初阶
class 类模板名// 类内成员定义// 动态顺序表// 注意:Vector不是具体的类,是编译器根据被实例化的类型生成具体类的模具public :, _size(0){}// 使用析构函数演示:在类中声明,在类外定义。~Vector();// 注意:类模板中函数放在类外进行定义时,需要加模板参数列表if(_pData)原创 2024-09-12 20:27:33 · 532 阅读 · 0 评论 -
C++ 内存管理
int main()// new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间//还会调用构造函数和析构函数free(p1);delete p2;// 内置类型是几乎是一样的// Cfree(p3);delete p4;free(p5);return 0;原创 2024-09-11 23:26:13 · 1029 阅读 · 0 评论 -
C++ 一个完整的日期类实现
【代码】C++ 一个完整的日期类实现。原创 2024-08-31 22:16:17 · 345 阅读 · 0 评论 -
C++ 类和对象(下篇)
初始化列表,static成员,友元,内部类,匿名对象,拷贝对象时的一些优化原创 2024-08-27 18:31:44 · 607 阅读 · 0 评论 -
C++ 类和对象(中篇)
类的6个默认成员函数,构造函数,析构函数,拷贝构造函数,赋值运算符重载原创 2024-08-21 10:54:40 · 964 阅读 · 0 评论 -
C++ 类和对象(上篇)
什么是面向过程和面向对象,什么是类,类的定义方式,类的访问限定符,类的实例化,类对象模型,this指针原创 2024-08-20 10:20:45 · 1190 阅读 · 0 评论 -
C++入门基础 命名空间__输入输出 __缺省参数__函数重载__引用__内联函数
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{} 中即为命名空间的成员。int main()// 域作用限定符::return 0;1.命名空间中可以定义变量/函数/类型2.命名空间可以嵌套3.同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。// 命名空间中可以定义变量/函数/类型int val;引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间。原创 2024-08-18 10:40:00 · 1029 阅读 · 0 评论