
c++
文章平均质量分 86
niu_sama
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++11 【 function包装器,bind包装器】
function包装器 也叫作适配器。C++中的function本质是一个类模板,也是一个包装器。模板参数说明:Ret: 被调用函数的返回类型Args…:被调用函数的形参包装示例function包装器可以对可调用对象进行包装,包括函数指针(函数名)、仿函数(函数对象)、lambda表达式、类的成员函数。public:class Pluspublic:int main()//1、包装函数指针(函数名)//2、包装仿函数(函数对象)//3、包装lambda表达式。原创 2024-11-02 19:35:51 · 924 阅读 · 0 评论 -
C++11 【 lambda表达式】
随着C++语法的发展,人们开始觉得上面的写法太复杂了,每次为了实现一个algorithm算法, 都要重新去写一个类,如果每次比较的逻辑不一样,还要去实现多个类,特别是相同类的命名,这些都给编程者带来了极大的不便。实际当我们以[&]或[=]的方式捕获变量时,编译器也不一定会把父作用域中所有的变量捕获进来,编译器可能只会对lambda表达式中用到的变量进行捕获,没有必要把用不到的变量也捕获进来,这个主要看编译器的具体实现。实际编译器在底层对于lambda表达式的处理方式,完全就是按照函数对象的方式处理的。原创 2024-11-02 15:55:36 · 823 阅读 · 0 评论 -
C++11 【 可变参数模板】
返回类型 函数名(Args… args)//函数体注意模板参数Args前面有省略号,代表它是一个可变模板参数,我们把带省略号的参数称为参数包,参数包里面可以包含0到N 个模板参数,而args则是一个函数形参参数包。模板参数包Args和函数形参参数包args的名字可以任意指定,并不是说必须叫做Args和args。现在调用Show函数时就可以传入任意多个参数了,并且这些参数可以是不同类型的。Show(1);return 0;原创 2024-08-09 01:01:00 · 505 阅读 · 0 评论 -
C++11 【类的新功能】
上述代码中用一个右值去构造s2对象,但由于Person类没有生成默认的移动构造函数,因此这里会调用Person的拷贝构造函数(拷贝构造既能接收左值也能接收右值),这时在Person的拷贝构造函数中就会调用string的拷贝构造函数对name成员进行深拷贝。如果要让Person类生成默认的移动构造函数,就必须将Person类中的拷贝构造、拷贝赋值和析构函数全部注释掉,这时用右值去构造s2对象时就会调用Person默认生成的移动构造函数。验证默认生成的移动构造和移动赋值所做的工作。原创 2024-08-07 00:18:12 · 981 阅读 · 0 评论 -
C++11【右值引用,移动语义,完美转发】
传统的C++语法中就有引用的语法,而C++11中新增了的右值引用语法特性,所以从现在开始我们之前学习的引用就叫做左值引用。无论左值引用还是右值引用,都是给对象取别名。左值是一个表示数据的表达式(如变量名或解引用的指针)。我们可以获取它的地址+可以对它赋值,左值可以出现赋值符号的左边,右值不能出现在赋值符号左边。定义时const修饰符后的左值,不能给他赋值,但是可以取它的地址。 左值引用就是给左值的引用,给左值取别名。左值引用就是对左值的引用,给左值取别名,通过“&”来声明。右值也是一个表示数据的表达原创 2023-12-20 17:46:09 · 867 阅读 · 0 评论 -
C++11 【初识】
1.在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。2.不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。3.从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。原创 2023-12-12 17:23:49 · 1217 阅读 · 0 评论 -
构造函数与析构函数详解
构造函数是特殊的成员函数,需要注意的是,构造函数虽然名称叫构造,但是构造函数的主要任 务并不是开空间创建对象,而是初始化对象。析构函数与构造函数功能相反,析构函数不是完成对对象本身的销毁,局部对象销毁工作是由编译器完成的。而对象在销毁时会自动调用析构函数,完成对象中资源的清理工作。原创 2023-08-13 00:03:34 · 1815 阅读 · 1 评论 -
构造函数初始化列表【详解】
尽量使用初始化列表初始化,因为不管你是否使用初始化列表, 对于自定义类型成员变量,一定会优先使用初始化列表初始化。初始化的步骤可以尽可能的放在一起,而构造函数体内就可以写其它的需求实现,增加代码的可读性。原创 2023-09-07 14:16:39 · 195 阅读 · 1 评论 -
详解const在位置上的差异-(包含类与对象)
Print里面是const类型的形参,我们不希望s._a被改变,所以在函数前面也加了const,而operator【】函数有两个是因为一个是只读函数,而另有一个要可以修改,一个函数无法同时支持const和非const,所以写了函数重载。对于const在最前面我们可以想象没有int* p,那么const是不是修饰&a,那么&a是不是就没法修改,也就是a无法修改了,但是p不受影响,p是什么,p是指针,所以p的指向还是可以改变的。的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;原创 2023-09-15 23:14:14 · 186 阅读 · 0 评论 -
string模拟实现【详解】
在学习string模拟之前,我们需要知道string是表示字符串的字符串类。要认识一个类,就需要去先认识他的成员变量。//字符串指针//容量//字符串大小。原创 2023-09-24 17:54:13 · 150 阅读 · 1 评论 -
有关vector模拟实现中迭代器失效问题
1 当容器调用erase时,当前位置到容器末尾元素的所有的迭代器全部失效2 当容器调用insert时,当前位置到容器末尾元素的所有的迭代器全部失效;3 当容器调用insert时,如果引起容器内存扩容,原来容器的所有的迭代器就全部失效进行更新操作:erase(insert)后会返回指向下一个元素的迭代器。原创 2023-10-08 13:30:19 · 141 阅读 · 1 评论 -
C++ vector的模拟实现
3>给n个val初始化,用const T& val = T() 是因为你并不知道给的val是什么,int?现代写法,这里要实现深拷贝, v2 = v1其实是v1去拷贝构造v,然后交换v2和v,便可对v2赋值。对于insert和erase导致的迭代器失效问题,在这一篇中你可以看到更详细的分析。因为写了reserve函数来调整空间了,所以判断空间是否用完后直接尾插就好了。解决erase导致的迭代器失效,返回一个指向下一个位置的迭代器,然后及时更新。3.大于的话交给reserve调整空间大小,遍历给赋值。原创 2023-10-10 22:19:15 · 103 阅读 · 1 评论 -
C++ list的模拟实现【详解】
1.list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代2.list底层是双向链表结构3.与其他的容器相比(array,vector,list),list通常在任意位置进行插入,移除元素的执行效率更好4.缺陷是不支持任意位置的随机访问head是哨兵结点,本身不存储数据,就是当头尾的作用。原创 2023-10-15 23:37:17 · 185 阅读 · 0 评论 -
Vector和List的反向迭代器 详解
反向迭代器是一种反向遍历容器的迭代器。也就是,从最后一个元素到第一个元素遍历容器。在使用上,它的使用完全与普通迭代器相同。while (rit!++rit;原创 2023-10-29 16:33:29 · 351 阅读 · 2 评论 -
C++继承 详解
继承的本质:类设计层次的复用public:protected:// 姓名// 继承后父类的Person的成员(成员函数+成员变量)都会变成子类的一部分。这里体现出了protected:int _stuid;// 学号protected:int _jobid;// 工号int main()Student s;Teacher t;s.Print();t.Print();return 0;原创 2023-10-31 13:09:36 · 74 阅读 · 0 评论 -
c++ 多态详解
1>多态的构成条件:1.必须通过基类的指针或者引用去调用虚函数2.被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写\虚函数虚函数:即被virtual修饰的类成员函数称为虚函数public:virtual void BuyTicket() { cout原创 2023-11-01 21:04:05 · 84 阅读 · 1 评论 -
set,map,multiset,multimap【详解】
set是按一定的次序存储元素的容器在set中,元素的value是唯一的,不可以重复,且为升序排序(和字典一样)set的底层是二叉搜索树,set中的元素不可以修改set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对子集进行直接迭代。5.对于map来讲,里面存储的是真正的,但是set底层实际上存储的是,所以在插入元素时,只需要插入value就可以,不需要搞键值对。原创 2023-11-14 21:14:58 · 125 阅读 · 0 评论 -
AVL树【图解】
/三叉链//存储的键值对int _bf;//balance factor平衡因子AVLTreeNode(const pair& kv)构造函数,_kv(kv),_bf(0)原创 2023-12-07 18:04:57 · 942 阅读 · 1 评论