2022笔记
-
栈区存放局部变量,形参
-
拷贝构造函数,只拷贝,不能修改原对象
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TACaBO0N-1690702299542)(2022%E7%AC%94%E8%AE%B0%2042025bba74f3483dbd128366776bcff2/5F07E2BF-A6ED-40DF-BAEA-ED8B9B1B7007.jpeg)]
-
系统默认会有个拷贝构造函数,但是是浅拷贝的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZpgeIqkY-1690702299543)(2022%E7%AC%94%E8%AE%B0%2042025bba74f3483dbd128366776bcff2/Untitled.png)]
-
隐式构造
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aiD15cDW-1690702299543)(2022%E7%AC%94%E8%AE%B0%2042025bba74f3483dbd128366776bcff2/2A121C1D-016F-4542-8591-FA975955108D.jpeg)]
-
关于this指针的知识
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ErtkN5Sg-1690702299543)(2022%E7%AC%94%E8%AE%B0%2042025bba74f3483dbd128366776bcff2/E0C68D58-66BC-46EB-9A0D-072E630EC351.jpeg)]
-
模板重载
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1TZS3ISD-1690702299543)(2022%E7%AC%94%E8%AE%B0%2042025bba74f3483dbd128366776bcff2/image.jpg)]
-
这里需要用&引用,如果不用&,也是拷贝构造函数json& data = jsonObj[“data”]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9K5RjGzq-1690702299544)(2022%E7%AC%94%E8%AE%B0%2042025bba74f3483dbd128366776bcff2/image%201.jpg)]
-
在自定义一个类时,需要重写拷贝构造函数和operation=运算符
-
因为系统默认的拷贝构造函数是浅拷贝,如果类中有指针,就会出现问题
-
=运算符也需要重载,因为也会出现浅拷贝的问题,在重载代码里,需要判断下,如果类里有指针,那么要把指针所指向的堆区数据释放干净,再开辟新的堆区数据,不然如果直接指针赋值并开启新的堆区空间,那么原来那个堆区空间就内存泄漏了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NvTyAPpS-1690702299544)(2022%E7%AC%94%E8%AE%B0%2042025bba74f3483dbd128366776bcff2/Untitled%201.png)]
-
-
string字符串的取值
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sC4S84v2-1690702299544)(2022%E7%AC%94%E8%AE%B0%2042025bba74f3483dbd128366776bcff2/Untitled%202.png)]
-
巧用swap函数收缩内存,swap是指把两个vector元素互换,但实际上是指针的互换,这边用一个匿名对象和v互换了,那v大小就是实际的size大小而不是capacity大小。然后执行完这行代码后,匿名对象立马销毁。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5PxST2Kw-1690702299544)(2022%E7%AC%94%E8%AE%B0%2042025bba74f3483dbd128366776bcff2/Untitled%203.png)]
-
栈stack,后进先出的值的排列
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rn0W6FZR-1690702299545)(2022%E7%AC%94%E8%AE%B0%2042025bba74f3483dbd128366776bcff2/Untitled%204.png)]
-
链表list
链表list可以获取头部和尾部数据,不支持随机访问数据,要获取,只能通过迭代器it++或者
it- -,不能it = it + 3这种跳跃式的访问。因为list的元素内存空间是不连续的。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eFgd3luK-1690702299545)(2022%E7%AC%94%E8%AE%B0%2042025bba74f3483dbd128366776bcff2/Untitled%205.png)]
链表的排序,不能使用标准算法的sort函数,因为链表不支持随机访问数据
而应该用成员函数sort
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bY2cBKGQ-1690702299545)(2022%E7%AC%94%E8%AE%B0%2042025bba74f3483dbd128366776bcff2/Untitled%206.png)]
-
set容器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yLYsHNpg-1690702299545)(2022%E7%AC%94%E8%AE%B0%2042025bba74f3483dbd128366776bcff2/Untitled%207.png)]
-
set容器排序,利用仿函数。
对于自定义的数据类型,必须指定仿函数,否则不能执行insert,因为set容器不知道按照什么规则排序
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1UlECz7X-1690702299545)(2022%E7%AC%94%E8%AE%B0%2042025bba74f3483dbd128366776bcff2/5EFAD223-5F0F-4BC1-807F-5BE4F50B736D.jpeg)]
-
仿函数,可以做为函数参数传递
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WeD5aST1-1690702299545)(2022%E7%AC%94%E8%AE%B0%2042025bba74f3483dbd128366776bcff2/Untitled%208.png)]
-
algorithm头文件里包含的find_if函数,就是查找容器里是否有满足条件的数据,需要传递一个仿函数。
-
STL定义好的一些算术仿函数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FMbxgX8J-1690702299546)(2022%E7%AC%94%E8%AE%B0%2042025bba74f3483dbd128366776bcff2/Untitled%209.png)]
-
transform函数(日常可能会用到)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dqXDfxmv-1690702299546)(2022%E7%AC%94%E8%AE%B0%2042025bba74f3483dbd128366776bcff2/Untitled%2010.png)]
-
count函数,可以算出容器中指定元素的个数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QbuSNn3k-1690702299546)(2022%E7%AC%94%E8%AE%B0%2042025bba74f3483dbd128366776bcff2/Untitled%2011.png)]
-
transform和copy很类似,底层的代码是差不多的,但是transform可以传入仿函数,实现自定义的操作
-
fill函数可以填充容器的值,相当于批量填充
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MLJsUcjL-1690702299546)(2022%E7%AC%94%E8%AE%B0%2042025bba74f3483dbd128366776bcff2/Untitled%2012.png)]
-
命名规则
全局变量用g_开头,例如g_value
成员变量用m_开头,例如m_value
静态变量用s_开头,例如s_value
-
extern “C”
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w6X5brFG-1690702299546)(2022%E7%AC%94%E8%AE%B0%2042025bba74f3483dbd128366776bcff2/Untitled%2013.png)]
-
隐藏
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QxKwjfou-1690702299546)(2022%E7%AC%94%E8%AE%B0%2042025bba74f3483dbd128366776bcff2/Untitled%2014.png)]
-
利用初始化表和函数体内初始化成员对象的区别
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1pDvqFz5-1690702299547)(2022%E7%AC%94%E8%AE%B0%2042025bba74f3483dbd128366776bcff2/Untitled%2015.png)]
-
为char 类型分配空间时,需要考虑*’\0’**结束符的空间
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KGgENW5J-1690702299547)(2022%E7%AC%94%E8%AE%B0%2042025bba74f3483dbd128366776bcff2/Untitled%2016.png)]
-
拷贝构造函数和赋值函数
在函数入口处无需与 NULL 进行比较,这是因为“引用”不可能是 NULL,而“指针”
可以为 NULL。// 拷贝构造函数 String::String(const String &other) { // 允许操作 other 的私有成员 m_data int length = strlen(other.m_data); m_data = new char[length+1]; strcpy(m_data, other.m_data); } // 赋值函数 String & String::operate =(const String &other) { // (1) 检查自赋值 if(this == &other) { return *this; } // (2)释放原有资源 delete [] m_data; // (3)分配新的内存资源,并复制内容 int length = strlen(other.m_data); m_data = new char[length+1]; strcpy(m_data, other.m_data); // (4)返回本对象的引用 return *this; }
-
析构函数注意点
不加上virtual会导致派生类的析构函数不执行,场景如下例:
由基类指针指向的子类对象,在销毁基类指针指向内存时,不会调用子类析构函数,所以要加上virtual关键字
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gG2qPW89-1690702299547)(2022%E7%AC%94%E8%AE%B0%2042025bba74f3483dbd128366776bcff2/Untitled%2017.png)]
-
纯虚函数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cqlxQFMe-1690702299547)(2022%E7%AC%94%E8%AE%B0%2042025bba74f3483dbd128366776bcff2/Untitled%2018.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PgIzLFQK-1690702299547)(2022%E7%AC%94%E8%AE%B0%2042025bba74f3483dbd128366776bcff2/Untitled%2019.png)]
-
抛出异常
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M0peqEdR-1690702299547)(2022%E7%AC%94%E8%AE%B0%2042025bba74f3483dbd128366776bcff2/EDE3CD79-E64D-462B-BDF1-6B0B9905C2DB.png)]
-
枚举用法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-84x3PYG6-1690702299548)(2022%E7%AC%94%E8%AE%B0%2042025bba74f3483dbd128366776bcff2/2E3564ED-451B-43C1-81A5-CA4E86A43516.png)]
-
移动构造函数
需要使用noexcept修饰,表示不会抛出异常
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CiLbVdJg-1690702299548)(2022%E7%AC%94%E8%AE%B0%2042025bba74f3483dbd128366776bcff2/Untitled%2020.png)]