
C++
文章平均质量分 83
自己的C++学习路
阿^觅
这个作者很懒,什么都没留下…
展开
-
C++11--(1)
列表初始化、变量类型推导、范围for、STL新增容器、左值引用和右值引用原创 2025-03-28 20:35:38 · 1220 阅读 · 0 评论 -
C++的特殊类设计
不能被拷贝、只能在堆上创建对象、只能在栈上创建对象、不能被继承、只能创建一个对象(单例模式)原创 2025-02-26 18:04:44 · 813 阅读 · 0 评论 -
C++的类型转换
标准C++为了加强类型转换的可视性,引入了四种命名的强制类型转换操作符:static_cast、reinterpret_cast、const_cast、dynamic_cast原创 2025-02-25 23:26:25 · 368 阅读 · 0 评论 -
unordered_map与unordered_set的实现
对于哈希的底层,最主要的逻辑还是链地址法 哈希桶的实现原创 2024-08-13 11:48:05 · 830 阅读 · 0 评论 -
红黑树的实现及测试
4. 对于每个结点,从该结点到其所有后代叶结点的简单路径上,均包含相同数目的黑色结点。对于红黑树来说,最重要的依旧是插入操作,与AVL树不同的是,一个是插入完后。来分析 -> 即 p 是位于左还是位于右,操作起来是一样的,只不过要分开写。3. 如果一个节点是红色的,则它的两个孩子结点是黑色的。5. 每个叶子结点都是黑色的(此处的叶子结点指的是空结点)可以先记录最左边一条路的黑色节点个数,然后去递归每一条路,最后显示的结果也是平衡,那就大概率没有逻辑上的问题了。,若不相同,则返回false,递归同时,原创 2024-08-01 19:40:42 · 724 阅读 · 0 评论 -
AVL树的实现及测试
这里我实现的AVL并不是一个完全泛型,而是用的一个。原创 2024-07-28 16:38:54 · 1060 阅读 · 0 评论 -
栈和队列以及优先级队列
他的底层结构为堆,因此与堆的实现非常相似,无非就是加上了一层封装。栈的实现非常简单,因为所有函数都可以去调用,适配器默认为。在堆中最重要的两个结构无非就是。与栈的实现类似,只不过是。原创 2024-07-01 18:45:39 · 204 阅读 · 0 评论 -
二叉搜索树的实现与测试
BSTree(二叉搜索树)是一个神奇的数据结构,其的特点是,左子树的所有值比根小,而右子树的所有值比根大根据这种特性,我们可以从该结构中快速的搜索一个数的存在,速度则为树的高度次。原创 2024-07-01 13:10:26 · 544 阅读 · 0 评论 -
list的模拟实现
在list的实现中最难实现的无非就是迭代器了,其他的功能只要学扎实了数据结构的链表后就能很容易理解。原创 2024-04-26 10:32:30 · 770 阅读 · 1 评论 -
vector的模拟实现
关于vector里面的插入删除,最主要的就是insert和erase,实现则两个,其他的插入删除,都可以复用这两个函数。begin() 和 end()则是返回底层的_start() 和 _finish()。删除数字后应该返回pos位置的迭代器,不然失去了该位置的迭代器,导致失效。如果不更新删除之后的pos,会导致迭代器访问不到pos位。扩容之后要更新pos位置,不然会导致扩容后的迭代器失效。对于迭代器的实现,这里选择用指针作为底层。主要是[]的下标访问功能,仿照数组的访问。原创 2024-04-21 23:07:19 · 515 阅读 · 0 评论 -
string的模拟实现
return!(s1 <= s2);return!(s1 < s2);return!(s1 == s2);out << ch;return out;s.clear();char ch;//in >> ch;while (ch!i = 0;return in;原创 2024-03-10 22:17:07 · 428 阅读 · 0 评论 -
C++——string(2)
上面的几个接口大家了解一下,下面的OJ题目中会有一些体现他们的使用。string类中还有一些其他的 操作,这里不一一列举,大家在需要用到时不明白了查文档即可。原创 2024-03-07 21:06:29 · 316 阅读 · 0 评论 -
C++——String(1)
4. string类是basic_string模板类的一个实例,它使用char来实例化basic_string模板类,并用char_traits 和allocator作为basic_string的默认参数(根于更多的模板信息请参考basic_string)。5. 注意,这个类独立于所使用的编码来处理字节:如果用来处理多字节或变长字符(如UTF-8)的序列,这个类的所有成员(如长度或大小)以及它的迭代器,将仍然按照字节(而不是实际编码的字符)来操作。,不太符合OOP的思想,而且底层空间需要用户自己管理,原创 2024-02-29 20:10:42 · 859 阅读 · 0 评论 -
C/C++模板初阶
那么如何解决上面的问题呢?大家都知道,瓦特改良蒸汽机,人类开始了工业革命,解放了生产力。本质是什么,重复的工作交给了机器去完成。有人给出了论调:懒人创造世界。重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函数。如果类型不匹配,编译器会尝试进行隐式类型转换,如果无法转换成功编译器将会报错。代码的可维护性比较低,一个出错可能所有的重载均出错。类模板实例化与函数模板实例化不同,如何实现一个通用的交换函数呢?,对于字符类型也是如此。,对于模板函数的使用,原创 2024-02-11 22:35:39 · 3261 阅读 · 0 评论 -
C/C++内存管理
_C__ staticGlobalVar在哪里?char2是一个数组,把后面常量串拷贝过来到数组中,数组在栈上,所以*char2在栈上。__C__ localVar在哪里?ptr1局部变量在栈区 *ptr1得到的是动态申请空间的数据在堆区。__A__ *pChar3在哪里?__A__ *char2在哪里?__A__ *ptr1在哪里?原创 2024-02-11 22:07:27 · 3299 阅读 · 0 评论 -
C++类和对象(7)
它不属于外部类,更不能通过外部类的对象去访问内部类的成员。实生活中的实体,用户必须通过某种面向对象的语言,对实体进行描述,然后通过编写程序,创。友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员。机对象进行描述的,通过洗衣机类,可以实例化出一个个具体的洗衣机对象,此时计算机才。之后,在计算机中就有了一个洗衣机类,但是洗衣机类只是站在计算机的角度对洗衣。之后,在人的头脑中已经对洗衣机有了一个清醒的认识,只不过此时计算机还不清。2. 注意内部类可以直接访问外部类中的。原创 2024-02-09 15:08:07 · 1120 阅读 · 0 评论 -
C++类和对象(6)
虽然上述构造函数调用之后,对象中已经有了一个初始值,但是不能将其称为对对象中成员变量。尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量,在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。,但是这时其还未初始化,因此是随机值,随后_a1进行初始化,值为1.2. 非静态成员函数可以调用类的静态成员函数吗?1. 静态成员函数可以调用非静态成员函数吗?,不属于某个具体的对象,存放在静态区。,与其在初始化列表中的先后。静态成员也是类的成员,受。原创 2024-02-07 17:18:05 · 579 阅读 · 0 评论 -
C++类和对象(5)
1.成员函数,如果是一个 对成员变量只进行读访问的 函数 ->建议加const 这样const对象和 非const对象都可以使用2.成员函数,如果是一个 对成员变量要进行读写访问的 函数 ->不能加const,否则不能修改成员变量8.取地址及const取地址操作符重载这两个默认成员函数一般不用重新定义,编译器默认会生成。// 年int _month;// 月int _day;// 日。原创 2024-02-07 16:20:39 · 615 阅读 · 0 评论 -
C++类和对象(4)
注意:内置类型成员变量是直接赋值的,而自定义类型成员变量需要调用对应类的赋值运算符。一个全局的赋值运算符重载,就和编译器在类中生成的默认赋值运算符重载冲突了,故赋值。返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。3.用于内置类型的运算符,其含义不能改变,例如:内置的整型+当然像日期类这样的类是没必要的。,返回引用可以提高返回的效率,有返回值目的是为了支持连续赋值。这时候就可以像下面一样,将函数写入类的内部即可解决。,因为成员函数的第一个参数为隐藏的this。原创 2024-02-05 16:35:11 · 964 阅读 · 0 评论 -
C++类和对象(3)
3.原创 2024-02-02 20:12:29 · 933 阅读 · 0 评论 -
C++-类和对象(2)
类的所有成员都在类的作用域中。在类体外定义成员时,需要使用。原创 2024-01-31 22:09:16 · 763 阅读 · 0 评论 -
C++-类和对象(1)
/ 类体:由成员函数和成员变量组成// 一定要注意后面的分号class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。类的两种定义方式1. 声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。2.类声明放在.h文件中,成员函数定义放在.cpp文件中,注意:成员函数名前需要一般情况下,更期望采用第二种方式。原创 2024-01-29 22:24:42 · 1015 阅读 · 0 评论 -
C++入门(3)
在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它,大家可思考下为什么?auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。return 10;auto b = a;//auto e;无法通过编译,使用auto定义变量时必须对其进行初始化return 0;【注意】使用auto定义变量时。原创 2024-01-25 17:47:00 · 2589 阅读 · 0 评论 -
C++入门(2)
出现。原创 2024-01-24 21:26:04 · 1021 阅读 · 0 评论 -
C++入门(1)
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。1. 正常的命名空间定义// 命名空间中可以定义变量/函数/类型int val;2. 命名空间可以嵌套int a;int b;int c;int d;3. 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。int a;int b;注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中。原创 2024-01-24 20:48:16 · 1044 阅读 · 0 评论