
C++
文章平均质量分 94
C++笔记
写不来CODE
我很懒,还没有个人简介
展开
-
【C++】异常和智能指针
C++11提供了一套新的错误处理机制——异常。在C语言阶段,当程序出现错误时是通过返回错误码来表示程序出错的类型,我们还需要去查询错误码来找到错误,最后才能解决错误。而C++提供的异常机制可以通过try、catch、throw关键字来发现错误,同时抛出一个错误对象,里面包含错误的具体信息,并在catch里面进行解决问题。原创 2025-01-18 10:38:21 · 1086 阅读 · 0 评论 -
C++11——3:lambda表达式、类的新功能、STL的变化、包装器
C++11还引入了lambda表达式,并且因为一些新特性的引入,类以及STL都发生了一些变化。句装器的引入也解决了一些复杂问题。下面就是一个简单的lambda表达式。1.lambda表达式语法lambda表达式的格式为:[capture-list] (parametres) -> return type {function body}下面给出一些lambda表达式的例子:我们看这些lambda的使用方法就跟函数是一样的,但是要注意,它们是匿名函数对象,不是函数。lambda表达式的函数体原创 2025-01-11 15:11:13 · 652 阅读 · 0 评论 -
C++11——2:可变模板参数
C++11引入了可变模板参数(variadic template parameters)的概念,它允许我们在模板定义中使用可变数量的参数。这样,我们就可以处理任意数量的参数,而不仅限于固定数量的参数。原创 2025-01-06 21:51:34 · 835 阅读 · 0 评论 -
C++11——1
C++11是继C++98后的一个大版本,新增了很多有意义的东西,很有意义学习。原创 2024-12-30 18:37:57 · 1217 阅读 · 0 评论 -
哈希
是一种。本质上就是通过哈希函数,使关键字key和存储位置建立一个映射关系。查找时,通过这个哈希函数计算出关键字key存储的位置,进而直接在指定的存储位置找到目标。所以哈希可以是实现O(1)的查找。需要注意的是,哈希表只是哈希思想的一种展现,哈希表是借助哈希函数,将关键字映射到数组指定位置的一种数据结构。分析:因为字符串中只包含小写字母,所以我们可以开一个26的数组用来映射每一个字母出现的次数,在这里我们的哈希函数就是ch-'a',这样我们就可以让每一个小写字母都映射一个位置。我们这里用到的就是。原创 2024-12-02 09:29:55 · 687 阅读 · 0 评论 -
模拟map/set的实现
map和set的底层都是红黑树,而我们在前面已经了解了红黑树的实现,所以我们现在来模拟实现map和set。原创 2024-11-22 18:05:11 · 784 阅读 · 0 评论 -
map和set的使用
STL中部分容器如:vector、string、list、deque等,它们都是一种序列式容器。它们本质上就是一种线性表,数据在逻辑上是线性存储的,其物理地址可能连续也可能不连续。在这些容器中,两个位置存储的值没有紧密的关联,随便交换两个元素,不会影响该容器的结构,它依旧是一个线性表。关联式容器也是用来存储数据的,只不过它在逻辑结构上不再是线性的,两个位置之间有着很强的关联,交换的话,就会破坏原有的结构。set和map的底层都是红黑树,而红黑树是一种特殊的搜索二叉树。原创 2024-11-15 12:26:27 · 851 阅读 · 0 评论 -
【C++】——多态
如果继承该抽象类的派生类没有重写该纯虚函数的话,该派生类也是一个抽象类。原创 2024-11-09 20:28:12 · 916 阅读 · 0 评论 -
【C++】——继承
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要手段,它允许我们在保持原有类特性的基础上进行扩展,增加方法(成员函数)和属性(成员变量),以这种方式产生的新类,称为子类/派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。假设现在存在有两个类——student类和teacher类public:// ...// ...protected:// 姓名// 地址// 电话// 年龄int _stuid;// 学号public:// ...原创 2024-11-08 11:49:34 · 734 阅读 · 0 评论 -
template advanced
当一个项目很大时,有很多的源文件。我们通过会采取声明和定义分离的方式来进行实现,即类/函数的声明都放在.h文件中,定义放在.cpp/.c文件中。分离编译(Separate Compilation)是指将程序的源代码分为多个独立的模块(或文件),每个模块可以单独进行编译生成目标文件。这些目标文件可以在后续的链接阶段合并成最终的可执行文件。分离编译的主要目的是提高程序的开发效率和可维护性。1、模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生2、增强了代码的灵活性。原创 2024-11-05 18:08:28 · 887 阅读 · 0 评论 -
stl_stack/queue
优先级队列之所以默认是大堆,原因在于其第三个模板参数 ,当我们改变第三个模板参数时,就可以将其变为小堆。原创 2024-11-02 16:14:18 · 978 阅读 · 0 评论 -
stl_list
stl容器中的list实现了带头循环双向链表,以高效地进行插入和删除操作,但随机访问的性能相对较差。原创 2024-10-30 17:24:20 · 1093 阅读 · 0 评论 -
vector
我们可以看到程序崩溃了,为什么内置类型就不会出错呢?原因在于扩容时memcpy是浅拷贝,导致新空间和就空间指向的是同一块空间,程序结束时导致析构了两次。i < size();++i)原创 2024-10-25 19:55:27 · 1015 阅读 · 0 评论 -
string
string其实是一个存储字符的顺序结构,也就是字符数组从文档可以看出来,string是typedef出来的,它其实是basic_string<>这个类模板显式实例化为basic_string<char>的一个类。basic_string还实例化除了其他的类这些类的区别在于使用的编码不同string的其他介绍可查看该文档。原创 2024-10-21 21:18:01 · 1076 阅读 · 0 评论 -
C/C++内存管理
new/delete在为自定义类型申请空间时会在申请空间之后和销毁空间之前分别调用其构造函数(完成初始化操作)和析构函数这也是new/delete和malloc/free的区别class Apublic:A(int a):_a(a)~A()private:int _a;//检查free(p1);delete p2;用new申请对象数组时也可进行初始化1.用已存在的对象进行初始化2.用匿名对象初始化3.利用隐式转化进行初始化A a1(1);A a2(2);原创 2024-09-26 18:20:35 · 1206 阅读 · 0 评论 -
C++——模板
函数模板参数的定义很像函数参数的定义。函数参数定义时:类型+变量名。而模板参数定义时要加上关键字typename/class+模板参数名。原创 2024-09-25 16:21:37 · 1132 阅读 · 0 评论 -
日期类的实现
日期相减得到天数,我们可以假设法找到日期大的和日期小的,两个日期直接相减不方便计算,我们可以让小日期++,然后记录加的次数,知道两者相等,加的次数就是之间相差的天数。当我们在实现日期的加减时,要频繁的计算当前月的天数,而且根据闰年平年的变化,2月的天数也会跟着变化。对于输入来说,我们要在用户输入之后对日期进行检查,如果日期非法,我们要提醒用户该日期是非法的,并重新输入。大于号的实现,我们可以将ture的条件挑出来,其他的都是false,到最后返回即可。后置++/--,返回++/--之前的值。原创 2024-09-05 21:44:10 · 655 阅读 · 0 评论 -
C++类和对象3
指定了访问的权限。原创 2024-09-11 13:06:56 · 634 阅读 · 0 评论 -
C++类和对象2
无参的默认构造函数。原创 2024-09-03 16:01:48 · 684 阅读 · 0 评论 -
C++类和对象1
类是C++中用户自己建立的类型。类似于C语言中的结构体。定义类的关键字为class。格式为:class 类名称为类头,花括号中的称为类体。类的声明以花括号后的分号结束,分号不可省略。在一个类中,既可以有成员变量,即类的属性;也可以有成员函数,即类的行为。而C语言阶段学习的结构体则只有成员变量。C++中,类中的成员变量为了与其他变量区分,其成员变量建议在名字前加上下划线。下面定义一个学生类:该类中的姓名、年龄、学号都是成员变量,而获取学生信息是成员函数,它的功能是打印学生信息。一个类会将一组数据和原创 2024-08-13 20:21:59 · 1037 阅读 · 0 评论 -
C到C++——C++基础
int& b = a;//正确int& c;//没有初始化//引用类型与被引用类型不同return 0;原创 2024-08-07 21:26:15 · 1413 阅读 · 0 评论