![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++学习
文章平均质量分 79
想拿offer
这个作者很懒,什么都没留下…
展开
-
C++-特殊类和单例模式
1. 将类的构造函数私有,拷贝构造声明成私有。防止别人调用拷贝在栈上生成对象。然后提供一个静态的成员函数,在该静态成员函数中完成堆对象的创建。2.将类的析构函数私有,然后提供一个公有的Delete函数提供释放资源的功能。就是说不管你将来用不用,程序启动时就创建一个唯一的实例对象。如果单例对象构造十分耗时或者占用很多资源,这种情况使用懒汉模式(思路:同上将构造函数私有化,然后设计静态方法创建对象返回即可。拷贝构造函数以及赋值运算符重载,因此。原创 2023-11-19 20:32:14 · 429 阅读 · 0 评论 -
C++智能指针
借此,我们实际上把管理一份资源的责任托管给了一个对象。这种做法有两大好处:不需要显式地释放资源。采用这种方式,对象所需的资源在其生命期内始终保持有效.原创 2023-11-19 20:03:52 · 304 阅读 · 0 评论 -
C++线程库
2.线程函数的参数线程函数的参数是以值拷贝的方式拷贝到线程栈空间中的,因此:即使线程参数为引用类型,在 线程中修改后也不能修改外部实参,因为其实际引用的是线程栈中的拷贝,而不是外部实参。注意:如果是类成员函数作为线程参数时,必须将this作为线程函数参数。 3.原子性操作库(atomic)多线程最主要的问题是共享数据带来的问题(即线程安全)。如果共享数据都是只读的,那么没问 题,因为只读操作不会影响到数据,更不会涉及对数据的修改,所以所有线程都会获得同样的数 据。但是,当一个或多原创 2023-11-11 21:56:14 · 57 阅读 · 0 评论 -
C++11特性
1. 左值引用只能引用左值,不能引用右值。2. 但是const左值引用既可引用左值,也可引用右值。原创 2023-11-11 21:13:56 · 350 阅读 · 0 评论 -
unordered_map/set
在C++98中,STL提供了底层为红黑树结构的一系列关联式容器,但是在节点较多的情况下,查询效率也不理想,于是,在C++11中STL又提供了4个unordered系列的关联式容器,这四个容器与红黑树结构的关联式容器使用方式基本类似,只是其底层结构不同,查询效率更快。(1). unordered_map是存储<key, value>键值对的关联式容器,其允许通过keys快速的索引到与其对应的value。(2). 在unordered_map中,键值通常用于惟一地标识元素,而映射值是一个对象,其内容与此。原创 2023-11-07 14:05:00 · 144 阅读 · 0 评论 -
红黑树封装map和set
map与set的底层是红黑树,直接在map与set中封装一棵红黑树,然后包装其接口。原创 2023-11-06 18:17:07 · 195 阅读 · 0 评论 -
map和set
但是二叉搜索树有其自身的缺陷,假如往树中插入的元素有序或者接近有序,二叉搜索树就会退化成单支树,时间复杂度会退化成O(N),因此map、set等关联式容器的底层结构是对二叉树进行了平衡处理,即采用平衡树来实现。(1). 与map/multimap不同,map/multimap中存储的是真正的键值对,set中只放。2). 在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。原创 2023-10-31 11:09:26 · 28 阅读 · 0 评论 -
C++多态
多态的概念:通俗来说,就是多种形态,。2.多态的构成条件多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。在继承中,构成多态需要有两个条件:(1)必须通过基类的指针或者引用调用虚函数。(2)被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。2.1 虚函数被virtual修饰的类成员函数称为虚函数。2.1.1 虚函数构成重写的三个条件虚函数的重写也称为覆盖。要求派生类中有一个虚函数与基类完全相同。完全相同指的是三同,。不符合重写的就是隐藏关系。原创 2023-10-08 16:46:39 · 23 阅读 · 0 评论 -
C++继承
(在子类成员函数中,可以。原创 2023-10-07 14:52:33 · 21 阅读 · 0 评论 -
栈与队列及优先级队列
队列是一种容器适配器,特点是先进先出,从容器的一端插入元素,从另一端提取元素。其底层容器一般使用的是deque,如有特别要求,list也是能满足需求。原创 2023-10-04 16:56:02 · 33 阅读 · 0 评论 -
List模拟实现及反向迭代器封装
list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。list在任意位置插入和删除元素效率高。list缺点是不能支持随机访问元素。原创 2023-09-30 15:17:06 · 98 阅读 · 0 评论 -
vector模拟实现及迭代器失效问题
vector内部是以动态数组的形式来存储数据的,表示可变大小的序列容器。vector的空间是连续的,可以采用下标对vector的元素进行访问。vector通过随机访问元素的效率非常高,但是执行插入和删除时效率低。执行尾插或尾删效率高。原创 2023-09-20 15:37:43 · 99 阅读 · 1 评论 -
string增删查改的模拟-C++
string是表示字符串的字符串类,该类的接口与常见的容器接口差不多,增加了一些特殊接口来处理字符串,该类存在于标准库STL中,在使用该类时需要包含头文件#include 。原创 2023-09-12 21:38:04 · 127 阅读 · 1 评论 -
C++模板初阶与STL介绍
在C语言中,如果我们想实现某一个函数,就要自己去实现这个函数的功能,如果遇上传参类型不同,就又要去写另一个版本的函数,在C++中提供了这样一个模具,可以适配各种类型的参数,做到一个函数实现代码复用。原创 2023-09-06 21:58:10 · 165 阅读 · 1 评论 -
C++内存管理
如果 malloc申请空间成功就直接返回,否则执行用户提供的空间不足应对措施,如果用户提供该措施就继续申请,否则就抛异常。(4). malloc的返回值为void*, 在使用时必须强转,new不需要,因为new后跟的是空间的类型。(5). malloc申请空间失败时,返回的是NULL,因此使用时必须判空,new不需要,但是new需。(3). malloc申请空间时,需要手动计算空间大小并传递,new只需在其后跟上空间的类型即可,是高效的I/O映射方式,用于装载一个共享的动态内存库。原创 2023-09-02 19:13:25 · 32 阅读 · 0 评论 -
类与对象(续)
定义时不添加static关键字,类中只是声明(3). 类静态成员即可用。原创 2023-09-02 18:57:39 · 27 阅读 · 0 评论 -
类的6个默认成员函数
默认的拷贝构造函数对象按内存存储按字节序完成拷贝,这种拷贝叫做浅拷贝,或者值拷贝。原创 2023-09-02 18:25:05 · 133 阅读 · 0 评论 -
类与对象(C++)
定义类的类定义结束时后面。类体中内容称为类中的称为或;类中的称为或者。类体中的成员一般都是声明。2.访问限定符struct和class的区别是:struct的类默认访问权限是public,而class的类默认访问权限是private。1. public修饰的成员在类外可以直接被访问2. protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)3. 访问权限4. 如果后面没有访问限定符,作用域就到 } 即类结束。原创 2023-08-31 14:34:59 · 26 阅读 · 0 评论 -
C++入门
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。// 命名空间中可以定义变量/函数/类型int z = 10;return x-y;注意:1.同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。2.一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中。2.2 使用方法命名空间有三种使用方法//加命名空间名称及作用域限定符int main()return 0;原创 2023-08-29 19:57:58 · 43 阅读 · 1 评论