C++ 2022笔记

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=运算符

    1. 因为系统默认的拷贝构造函数是浅拷贝,如果类中有指针,就会出现问题

    2. =运算符也需要重载,因为也会出现浅拷贝的问题,在重载代码里,需要判断下,如果类里有指针,那么要把指针所指向的堆区数据释放干净,再开辟新的堆区数据,不然如果直接指针赋值并开启新的堆区空间,那么原来那个堆区空间就内存泄漏了。

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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)]

  • 移动构造函数

    C++移动构造函数以及move语句简单介绍

    需要使用noexcept修饰,表示不会抛出异常

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CiLbVdJg-1690702299548)(2022%E7%AC%94%E8%AE%B0%2042025bba74f3483dbd128366776bcff2/Untitled%2020.png)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值