
C++ Primer笔记碎片
文章平均质量分 81
全书学习,记录未知碎片
就要 宅在家
New git new get
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++ Primer笔记——查找算法
页数:P771(A.2.1查找对象的算法)算法头文件:first:序列的起始迭代器last:序列的结尾迭代器val:特定的一个值unaryPred:自定义,用于自定义查找方式binaryPred:自定义,用于自定义查找方式。原创 2023-05-23 10:18:36 · 1149 阅读 · 2 评论 -
C++ Primer笔记——默认移动操作、移动迭代器、左右值引用成员函数、标准库仿函数、function包装器
标准库定义了一些类,重载了小括号,可以在泛型算法中用于替换函数类型参数,即仿函数。求和:plus示例(其他仿函数类似,不再演示)://将first开始5个元素与second的5个元素相加结果写入results数组中求差值:minus求积:multiplies求差:divides求余:modulus内部实现:求相反数:negate判断是否相等:equal_to //是:true,否:false,下同。原创 2023-01-19 00:15:00 · 1945 阅读 · 1 评论 -
C++ Primer笔记——allocator、unique_ptr和release、智能指针与动态数组、阻止拷贝
声明但不定义一个函数是合法的,但是有一个例外,就是派生类对基类虚函数的覆盖,如果只有声明将在多态调用时发生链接错误,无法找到绑定的虚函数的定义。与new不同的是,它一般是提前分配了一大块未初始化的空间,使用时再根据所需空间大小进行初始化,其实就是将一块空间资源让使用者自行维护。,因此使用动态数组时只需要在对象类型后提供一对方括号,表明指针指向的是一个数组。值得注意的是,此时的空间并不能够直接使用,因为没有进行初始化操作。参数p是指针,指向释放资源起始位置,n是要释放的该类型资源的数量。原创 2023-01-01 09:30:00 · 2074 阅读 · 6 评论 -
C++ Primer笔记——lower/upper_bound、hash、make_shared、智能指针与new结合使用
当函数结束时,sp2会先析构,因为sp2是独立创建的(sp2并不知道空间来自智能指针sp),因此引用计数为1,会直接释放该空间。众所周知,shared_ptr构造函数是explicit的,因此,不要希望通过通过赋值的形式完成初始化操作,那样会有隐式类型转换发生,而shared_ptr会报错。当func函数结束时,sp会调用析构函数,因为只有sp一个智能指针指向p空间,因此p指针空间会被释放。,当回到main函数时,p已经指向一块被释放的空间,即悬空指针,如果继续使用p,其行为是未定义的。原创 2022-12-30 07:45:00 · 1499 阅读 · 7 评论 -
C++ Primer笔记——lambda表达式与bind函数
lambda是C++11所规定的一种新方法。一般用于泛型算法传递自定义函数。[ 捕捉列表 ] ( 参数列表 ) ->返回值类型 { 函数体 }lambda表达式会返回一个函数对象。};f(a, b);等价于下列函数{}//按降序排序});使用lambda表达式时,1.捕捉列表可以为空2.尾置返回类型和参数列表可以忽略,即[]{};3.捕捉列表和函数体不能忽略。原创 2022-12-20 09:00:00 · 1366 阅读 · 4 评论 -
C++ Primer笔记——unqiue、插入迭代器、流迭代器、insert返回值、关联容器的删与查
unqiue函数会将容器相邻的元素的重复项“删除”。这里需要注意几点:1.只会将容器内相邻元素重复项删除,使用前请确保同样元素相邻如果内部这样存储:1,2,2,3,2,4,3,5那么得到的将是:1,2,3,2,4,3,5,52.参数范围是左闭右开,右边参数是最后一个参与unique的下一个参数。3.返回值是最后一个不重复元素的下一个位置。原创 2022-12-18 09:30:00 · 965 阅读 · 2 评论 -
C++ Primer笔记——explicit、string流、vector比较、emplace
举个例子,如果构造函数参数是string类型,那么当使用赋值符号进行初始化操作时,实际上是将string隐式转换成临时目标类,再将临时对象通过拷贝构造给真正对象。当不希望发生隐式类型转换时,需要使用explicit关键字。A a(s);//正确//正确A a = s;//错误1.只能用于构造函数2.只能用于单参数构造函数3.类外定义构造函数时不能重复书写。4.可以显式强制转换。原创 2022-12-16 13:45:00 · 1308 阅读 · 4 评论 -
C++ Primer笔记——constexpr、成员函数const、mutable、类的声明、委托构造
完成初始化应该指的是完成初始化列表,构造函数内的行为叫做赋值,因此改成直到构造函数执行完才真正获得const属性可能更好。这是因为同类成员需要初始化,但成员处在自己类的内部,类对象本身都还未完成初始化,内部同类成员又怎么可能完成初始化呢。如果成员函数是const修饰,那么其成员变量将不能修改,但是用mutable关键字修饰的成员变量依旧可以修改。因为静态成员需要在类外进行,定义类内只是声明,且只属于类本身,不属于任何类对象。constexpr修饰的函数,可以用于常量表达式,其返回值是一个右值。原创 2022-12-14 13:15:00 · 1058 阅读 · 5 评论 -
Primer笔记——显式转换、返回数组指针的函数、const形参函数重载
指针本身是const属性(常量指针),例:int const* p;:指针指向const类型对象空间(指向常量的指针),例:const int* p;只要不是底层const都可以通过该函数转换。该函数可以用来找回存于void*指针中的值。值得注意,如果指针转化后类型并不是数据本身类型,也会报错,结果未定义。使用函数重载时,顶层const不能进行重载,底层可以。原因:传入指针实参时,常量指针和普通指针都能被常量指针指针接收。但指向常量的指针不能被普通指针形参接收,只能被指向常量的指针形参接受。原创 2022-11-29 06:45:00 · 637 阅读 · 6 评论 -
Primer笔记——typedef指针类型别名时的const陷阱
只要typedef中没有声明const,那么指针永远指向变量。只要类型别名在使用时有const修饰,那么指针永远是常量指针。即typedef中const决定指向对象属性,定义时const决定指针自身属性。说的官方一点就是typedef决定底层const,定义决定顶层const。typedef定义替换形式含义int* p指向变量的指针指向变量的常量指针指向常量的指针指向常量的常量指针先解决问题再写代码——John Johnson如有错误,敬请斧正。原创 2022-11-27 10:45:00 · 1069 阅读 · 4 评论