![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 68
Asuiiiyi
这个作者很懒,什么都没留下…
展开
-
继承、菱形继承问题、虚拟继承、虚基表
继承和组合public继承是一种is-a的关系。也就是说每个派生类对象都是一个基类对象。组合是一种has-a的关系。假设B组合了A,每个B对象中都有一个A对象。优先使用对象组合,而不是类继承。原创 2023-10-08 10:59:21 · 87 阅读 · 1 评论 -
priority_queue的模拟实现
优先级队列默认使用vector作为其底层存储数据的容器,在vector上又使用了堆算法将vector中元素构造成 堆的结构,因此priority_queue就是堆,所有需要用到堆的位置,都可以考虑使用priority_queue。注意: 1.默认情况下priority_queue是大堆。 2.(重要) 如果priority_queue中放自定义类型的数据,“用户需要在自定义类型中”提供> 或者< 的重载,以重新定义在此类中">"和"原创 2023-09-17 20:03:10 · 44 阅读 · 1 评论 -
模拟实现vector中reserve接口所遇到的拷贝问题
结果:报错,程序崩溃问题分析:1. memcpy是内存的二进制格式拷贝,将一段内存空间中内容原封不动的拷贝到另外一段内存空间中。2. 如果拷贝的是自定义类型的元素,memcpy既高效又不会出错,但如果拷贝的是自定义类型元素,并且自定义类型元素中时,就会出错,。原创 2023-08-24 22:23:13 · 80 阅读 · 1 评论 -
vector 迭代器失效问题
迭代器的主要作用就是让算法能够不用关心底层数据结构,其底层实际就是一个指针,或者是对指针进行了封装。比如:resize、reserve、insert、assign、 push_back等。,而使用一块已经被释放的空间,造成的后果是程序崩溃(即如果继续使用已经失效的迭代器,程序可能会崩溃)。与vector类似,string在插入+扩容操作+erase之后,迭代器也会失效。对于vector可能会导致其迭代器失效的操作。2. 指定位置元素的删除操作-it的位置还是有效的。原创 2023-08-21 22:45:15 · 52 阅读 · 1 评论 -
string的浅拷贝、深拷贝、写时拷贝
(调用析构时,首先析构s2,s2与s1指向同一块内存,所以s2析构完成后,s1的内存空间也被清除,等到s1析构时,同一块空间再次被释放,多次释放就会引起程序崩溃)深拷贝产生浅拷贝的主要是因为在进行拷贝构造或是赋值运算符重载时,直接将就对象的内容原封不动的粘贴给新对象,因而在空间释放时形成了多次释放问题,因此如果一个类中涉及到资源的管理,其拷贝构造函数、赋值运算符重载以及析构函数必须要显式给出。一般情况都是按照深拷贝方式提供。传统string类的写法。原创 2023-08-18 16:53:01 · 47 阅读 · 1 评论 -
cin、cin.getline()、getline()的用法
cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数原创 2023-08-17 01:39:21 · 93 阅读 · 1 评论