C++
文章平均质量分 70
li星野
这个作者很懒,什么都没留下…
展开
-
C++:智能指针了解
C++ 中的智能指针是一种用于自动管理动态分配的内存的类模板。它们可以帮助程序员避免内存泄漏和悬挂指针等问题。C++11 引入了三种主要的智能指针:std::shared_ptr 和每种智能指针都有其特定的用途和优势。原创 2024-08-11 22:20:31 · 293 阅读 · 0 评论 -
C++:哈希函数和桶
有一个简单的Point类,它有两个int类型的成员变量x和y。Point类定义了一个内部的Hash结构体,它重载了()操作符以提供哈希函数。在std命名空间中特化了std::hash模板,以便unordered_map等容器能够使用它。#include // 包含std::hash// 自定义的Point类public:int x, y;// 为了让Point可以用于unordered_map等容器中,我们需要提供哈希函数。原创 2024-08-17 21:30:00 · 867 阅读 · 0 评论 -
C++:unordered_set和unordered_map
unordered_set 是 C++ 标准库中的一个无序关联容器,它存储的元素是唯一的,并且元素的插入、删除和查找操作平均时间复杂度为常数时间 O(1)(尽管在最坏情况下可能退化到 O(n),但这在实际情况中很少发生)。unordered_set 内部通常实现为一个哈希表,这意味着它不会根据元素的任何特定顺序来存储元素。原创 2024-08-16 23:30:00 · 652 阅读 · 0 评论 -
C++:multiset和multimap
multiset 是一个关联容器,它存储的元素也是唯一键的集合,但与set 不同的是,multiset 允许存储多个具有相同键的元素。multiset 内部通常实现为一个红黑树,这意味着元素总是按键的顺序存储,同时保持了元素插入的顺序(如果键相同,则按插入顺序)。原创 2024-08-15 23:15:00 · 390 阅读 · 0 评论 -
C++:有序关联容器map
map 是一种关联容器,它存储的元素是键值对(key-value pairs),其中每个键都映射到其关联的值上。map 内部通常实现为一个红黑树,这意味着元素总是按键的顺序存储,这使得元素的查找、插入和删除操作都能在对数时间内完成。原创 2024-08-14 23:30:00 · 459 阅读 · 0 评论 -
C++:有序关联容器set
(1)顺序容器,容器中的元素是按它们在容器中的位置来顺序保存和访问的(可以理解是数组)(2)顺序容器有array、vector、deque、list、forward_list、string等(3)关联容器中的元素是按关键字来保存和访问的,关联的意思就是关键字(key)与存储值(value)的关联(4)主要的关联容器类型是map和set(5)关联容器支持高效的关键字查找和访问(6)有序关联容器:容器内元素按顺序排列,一般用树(譬如红黑树)来实现。原创 2024-08-13 23:30:00 · 505 阅读 · 0 评论 -
C++:queue和priority_queue
优先队列(priority_queue)是一种特殊的队列,其中每个元素都被赋予了一个优先级。元素的出队顺序是根据它们的优先级来决定的,而不是它们被插入到队列中的顺序。在默认情况下,最高优先级的元素会被首先移除(即,对于最大堆实现的优先队列,最大的元素会被首先移除)。原创 2024-08-12 22:45:00 · 271 阅读 · 0 评论 -
C++:容器适配器stack详解
在两个栈之间交换元素,最直接的方法是使用swap函数(如果语言支持)或者手动将元素从一个栈转移到另一个栈中,然后反向操作以完成交换。原创 2024-08-11 22:17:46 · 462 阅读 · 0 评论 -
C++:容器了解
顺序容器是STL中的一种容器类型,用于存储一系列的元素,这些元素保持一定的顺序。原创 2024-08-07 21:00:00 · 409 阅读 · 0 评论 -
C++:模板特化
模版特化就是针对指定类型,重新编写一个函数,实现不同的功能全特化:所以类型都特化偏特化:部分类型特化、不同限定条件。原创 2024-08-06 21:45:00 · 352 阅读 · 0 评论 -
C++:std::multiplies<int>|std::for_each|std::transform
std::multiplies 是一个模板类 std::multiplies 的特化,用于整数类型的乘法。它是一个函数对象,重载了函数调用运算符,使其能够像函数一样使用。std::partial_sum 可以接受一个二元运算符作为参数,用于定义如何计算部分和。使用 std::multiplies 可以计算部分乘积。总结。原创 2024-08-05 20:30:00 · 635 阅读 · 0 评论 -
c++:内存管理
理解可用内存区域堆、栈、全局数据区、自由存储区会使用new、delete理解new和malloc的区别原创 2024-07-10 20:15:00 · 387 阅读 · 0 评论 -
C++:组合和继承的区别
理解什么是组合,一个class类里面有很多其他class类类型的成员变量理解组合和继承的区别二义性:执行了一个函数,确不一定是自己想指定的那个解决方案:用c.A::func()明确的指定调用的是class虚继承有点像条件编译,引入一次就好,不用重复引入,也能达到引入效果学习记录,侵权联系删除。来源:朱老师物联网大课堂。原创 2024-07-11 23:00:00 · 742 阅读 · 0 评论 -
C++:std::find|std::find_if|std::find_if_not
std::find: 查找与指定值相等的第一个元素。std::find_if: 查找第一个满足指定条件的元素。std::find_if_not: 查找第一个不满足指定条件的元素。原创 2024-08-03 22:15:00 · 361 阅读 · 0 评论 -
C++:std::all_of|std::any_of|std::none_of
std::all_of 检查范围内的所有元素是否都满足某个条件。若所有元素都满足条件,则返回 true,否则返回 false。原创 2024-08-02 21:45:00 · 344 阅读 · 0 评论 -
C++:函数适配器-std::bind
std::bind 是 C++11 引入的一个功能强大的函数适配器,它允许你将一个可调用对象(如函数、函数对象、Lambda 表达式、成员函数指针等)与它的参数进行绑定,生成一个新的可调用对象。这个新的可调用对象在调用时,会自动将其绑定的参数传递给原始的可调用对象。通过这种方式,std::bind 可以用于部分应用(partial application)或参数重排(currying)等场景。std::bind 用于将函数或成员函数与特定参数绑定,创建新的函数对象。原创 2024-08-01 21:45:00 · 387 阅读 · 0 评论 -
C++:lamba表达式
lambda的捕获只向外突破一层值传递就是讲变量复制一下后使用,在lambda的捕获中会将变量修改为const类型的变量引用传递,就是直接修改内存内容。原创 2024-07-31 19:45:00 · 642 阅读 · 0 评论 -
C++:了解函数对象
C++ 标准库中提供了一些预定义的函数对象,它们位于头文件 中。std::plus:用于加法操作。std::minus:用于减法操作。std::multiplies:用于乘法操作。std::divides:用于除法操作。std::greater:用于大于比较。std::less:用于小于比较。// 使用 std::plus 函数对象进行加法运算// 输出 11, 12, 13, 14, 15return 0;原创 2024-07-30 22:15:00 · 399 阅读 · 0 评论 -
C++:了解谓词predicate
在C++中,谓词是指可以作为函数参数,并且返回值类型为bool型的函数对象、Lambda表达式、普通函数或函数指针。谓词通常用于算法中,对序列中的元素进行某种测试,返回一个布尔类型的测试结果,根据不同的结果执行不同的操作。原创 2024-07-29 23:00:00 · 303 阅读 · 0 评论 -
C++:泛型算法了解
泛型算法是指可以处理多种数据类型和结构的算法。它们通常通过模板来实现,使得同一段代码可以在不同的数据类型上复用,减少代码冗余,增加代码的灵活性和可维护性。原创 2024-07-28 22:13:46 · 317 阅读 · 0 评论 -
C++:序列容器之deque
list是一种基于双向链表实现的序列容器,它提供了在常数时间内进行任意位置插入和删除操作的能力,但不支持随机访问。list的灵活性和高效性使得它在处理需要频繁插入和删除操作的场景时非常有用。原创 2024-07-28 22:07:08 · 370 阅读 · 0 评论 -
C++:序列容器之list
list是一种基于双向链表实现的序列容器,它提供了在常数时间内进行任意位置插入和删除操作的能力,但不支持随机访问。list的灵活性和高效性使得它在处理需要频繁插入和删除操作的场景时非常有用。原创 2024-07-27 23:08:49 · 340 阅读 · 0 评论 -
C++ : 序列容器之Vector
定义:Vector是定义在命名空间std内的模板,是一种随机迭代器,其内存管理是一块连续分配的内存,支持动态扩展。头文件:,在使用时需要包含此头文件。特点:元素连续存储,支持随机访问,访问效率与数组相同。动态大小管理,容器大小可以自动调整。分配额外的空间以适应可能的增长,避免频繁的内存重新分配。原创 2024-07-26 22:14:02 · 146 阅读 · 0 评论 -
C++ :迭代器的引入
移动遍历的机制数组遍历元素,指针*p++思考结构体怎么使用指针遍历元素?原创 2024-07-23 20:45:00 · 1801 阅读 · 0 评论 -
C++:STL的容器类&array的初步使用
容器是用来存放对象的,就是容器类,是用做的容器的内存的管理方法内核:数据结构 + 算法C语言的数组和结构体,是语言源生支持的容器C++ 的容器通过类库提供,容器类库被模板技术泛华后,就是STL容器STL容器有哪些?序列容器:位置与元素值无关;包括array、vector、deque、list、forward_list等几个。排序容器:按照元素值排序好;包括set、multiset、map、mutilmap等。哈希容器:未排序,元素位置由哈希函数决定;原创 2024-07-20 20:15:00 · 159 阅读 · 0 评论 -
C++:模板类的继承
总结:在继承时,相当于用子类的模板参数Tx去实例填充了父类的模板参数Ty。类模板 继承 普通类 (类的成员函数和变量都没有使用模板)类模板 继承 模板类(类的成员函数/变量有使用模板)作用:用于构建模板化的类体系,写模板化的大框架。单模板参数,类模板继承类模板,代码实现。(2)类模板 继承 模板类。(3)类模板 继承 普通类。(4)普通类 继承 模板类。本质上要理解模板的对应关系。1)类模板 继承 类模板。普通类 继承 模板类。原创 2024-07-19 23:45:00 · 359 阅读 · 0 评论 -
C++:模板运算算符重载
运算符重载+运算符重载+=原创 2024-07-22 22:15:00 · 576 阅读 · 0 评论 -
C++:模板友元函数
需要class和friend function的2个前置声明。友元函数参数中类的直接给出具体类型,譬如。这种友元函数实际是削弱了模板参数在使用。友元函数声明和定义都写在class内部。声明时函数名加后缀,而定义时不用加。友元函数参数中带模板参数方法1。友元函数参数中带模板参数方法2。友元函数参数中不带模板的情况。友元可以适配类的各种模板参数。原创 2024-07-21 23:30:00 · 125 阅读 · 0 评论 -
C++:模板编程入门
假设我们需要实现对整形、浮点型、双精度型数据的交换函数,一般情况我们需要重载三个函数,但是使用模板,我们使用一个函数就能解决。函数在编译时进行重载。原创 2024-07-18 22:15:00 · 518 阅读 · 0 评论 -
C++:嵌套类和局部类
(1)在一个类(叫外围类)的内部定义一个类(叫内部类)。代码演示(2)嵌套类技术也是一种类的组合技术,和前面讲的继承、组合有类似。(3)嵌套类主要是限定了内部类的作用域(4)嵌套类的内部类和外围类各自有各自的访问权限限定符,且遵守传统权限规则(5)嵌套类中的成员函数可以在它的类体外定义,但是要附加类名的作用域限定说明(6)嵌套类的内部类中声明的友元,并不是外围类的友元(7)定义嵌套类的目的在于隐藏类名,减少全局标识符,限制用户使用该类建立对象。原创 2024-07-17 22:00:00 · 322 阅读 · 0 评论 -
C++ :友元类
有元函数是单向的两个类可以互为有元类、可以相互拥有有元方法C++编译器在寻找运算符函数时,找的自己内部的函数,有就用显示实现的函数,没有的话就使用默认实现的,有元函数是外部函数,就不太编译器寻找范围内。原创 2024-07-17 22:45:00 · 420 阅读 · 0 评论 -
C++ :友元函数
有元函数可以访问类内部三种权限的成员有元函数是类外部的函数有元函数有两种访问方式,一种是外部函数,一种是另外一个类的成员函数.原创 2024-07-16 23:30:00 · 198 阅读 · 0 评论 -
C++:类的静态成员
(1)用static修饰成员变量,即为静态成员变量;用static修饰成员方法,即为静态成员方法(2)静态成员属于class本身,而不属于对象静态成员变量在类外部定义,在类内部声明,可以使用类名和类的变量访问,访问的都是同一个变量静态成员方法,在定义不用添加static,在类内声明是需要添加,也可以直接在类内直接实现函数体,需要添加static静态变量相当于全局变量类里面的普通变量相当于局部变量和malloc堆内存。原创 2024-07-16 21:45:00 · 451 阅读 · 0 评论 -
C++:++和--运算符的前置后置如何实现
a++ ,先加后用,++a ,先加后用,后置++ 需要带参数理解有两种运算符重载的方法,区分什么时候怎么使用。原创 2024-07-15 23:00:00 · 267 阅读 · 0 评论 -
C++ :String类的赋值运算符重载
不管是拷贝构造函数还是运算符重载,都要注意内存管理。原创 2024-07-15 20:45:00 · 488 阅读 · 0 评论 -
c++ :运算符重载函数中的细节
定义新变量并且使用已有变量对堆新变量进行初始化时会调用拷贝构造函数对已经定义的变量使用已有变量进行赋值运算时会调用赋值运算符函数返回值不同,不能构成重载运算符重载传参的尴尬,导致引用的产生.原创 2024-07-14 20:24:29 · 194 阅读 · 0 评论 -
C++:运算符重载引入
(1)什么是运算符?譬如+ - * / %等算术运算符和> < ==!=等关系运算符就是典型的可重载运算符(但不是所有的运算符都可以重载,譬如sizeof)(2)运算符诞生于C语言中,用来对变量进行某种“预定义”的运算操作,这种预定义是编译器预制好的,编译时会翻译对应到CPU机器码(3)面向对象时代带来新的问题:两个对象如何运算?譬如:Person a, b, c;c = a + b;此处的+让编译器如何解读?见下面示例因为自己定义的类型不能直接使用预算符,所以需要进行运算符重载。原创 2024-07-14 20:19:55 · 695 阅读 · 0 评论 -
C++:using重新定义继承时访问权限
继承分三种,不同的继承会影响访问权限重定义,是一个类里面的同一个函数,有不同的参数列表覆盖是子类重新定义和父类里面的同名函数多态是指使用父类指针指向子类变量时,执行的是子类的方法存虚函数就是没有函数实体的虚函数关键词virtual 和运行时动态绑定关系密切。原创 2024-07-12 23:30:00 · 260 阅读 · 0 评论 -
C++:虚函数相关
多态就是当父类类型的指针指向的是子类的变量时,指针调用的方法还是子类的方法,是运行时决定的实现的方法就是虚函数,即在父类方法前添加关键词virtual纯虚函数基类中只有原型没有实体的一种虚函数纯虚函数也可以实现多态有纯虚函数的类成为抽象类,可以包含其他普通方法、数据成员,不可实例化基类有一个虚函数,析构函数前需要添加virtual在析构函数前添加virtual,就是其析构函数转换到运行时动态绑定原创 2024-07-13 21:15:00 · 445 阅读 · 0 评论 -
C++:重定义
理解什么是隐藏(重定义)派生类对象直接调用时,隐藏规则生效,直接调用的肯定是派生类中重新实现的那一个子类是一个拥有父类属性和方法加上拥有自己的属性和方法的独立的类,可以降级变成父类来用原创 2024-07-11 22:45:00 · 205 阅读 · 0 评论