c++
文章平均质量分 84
niu_sama
这个作者很懒,什么都没留下…
展开
-
C++11【右值引用,移动语义,完美转发】
传统的C++语法中就有引用的语法,而C++11中新增了的右值引用语法特性,所以从现在开始我们之前学习的引用就叫做左值引用。无论左值引用还是右值引用,都是给对象取别名。左值是一个表示数据的表达式(如变量名或解引用的指针)。我们可以获取它的地址+可以对它赋值,左值可以出现赋值符号的左边,右值不能出现在赋值符号左边。定义时const修饰符后的左值,不能给他赋值,但是可以取它的地址。 左值引用就是给左值的引用,给左值取别名。左值引用就是对左值的引用,给左值取别名,通过“&”来声明。右值也是一个表示数据的表达原创 2023-12-20 17:46:09 · 829 阅读 · 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 · 1130 阅读 · 0 评论 -
构造函数与析构函数详解
构造函数是特殊的成员函数,需要注意的是,构造函数虽然名称叫构造,但是构造函数的主要任 务并不是开空间创建对象,而是初始化对象。析构函数与构造函数功能相反,析构函数不是完成对对象本身的销毁,局部对象销毁工作是由编译器完成的。而对象在销毁时会自动调用析构函数,完成对象中资源的清理工作。原创 2023-08-13 00:03:34 · 962 阅读 · 1 评论 -
构造函数初始化列表【详解】
尽量使用初始化列表初始化,因为不管你是否使用初始化列表, 对于自定义类型成员变量,一定会优先使用初始化列表初始化。初始化的步骤可以尽可能的放在一起,而构造函数体内就可以写其它的需求实现,增加代码的可读性。原创 2023-09-07 14:16:39 · 81 阅读 · 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 · 56 阅读 · 0 评论 -
string模拟实现【详解】
在学习string模拟之前,我们需要知道string是表示字符串的字符串类。要认识一个类,就需要去先认识他的成员变量。//字符串指针//容量//字符串大小。原创 2023-09-24 17:54:13 · 57 阅读 · 1 评论 -
有关vector模拟实现中迭代器失效问题
1 当容器调用erase时,当前位置到容器末尾元素的所有的迭代器全部失效2 当容器调用insert时,当前位置到容器末尾元素的所有的迭代器全部失效;3 当容器调用insert时,如果引起容器内存扩容,原来容器的所有的迭代器就全部失效进行更新操作:erase(insert)后会返回指向下一个元素的迭代器。原创 2023-10-08 13:30:19 · 70 阅读 · 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 · 66 阅读 · 1 评论 -
C++ list的模拟实现【详解】
1.list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代2.list底层是双向链表结构3.与其他的容器相比(array,vector,list),list通常在任意位置进行插入,移除元素的执行效率更好4.缺陷是不支持任意位置的随机访问head是哨兵结点,本身不存储数据,就是当头尾的作用。原创 2023-10-15 23:37:17 · 58 阅读 · 0 评论 -
Vector和List的反向迭代器 详解
反向迭代器是一种反向遍历容器的迭代器。也就是,从最后一个元素到第一个元素遍历容器。在使用上,它的使用完全与普通迭代器相同。while (rit!++rit;原创 2023-10-29 16:33:29 · 190 阅读 · 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 · 40 阅读 · 0 评论 -
c++ 多态详解
1>多态的构成条件:1.必须通过基类的指针或者引用去调用虚函数2.被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写\虚函数虚函数:即被virtual修饰的类成员函数称为虚函数public:virtual void BuyTicket() { cout原创 2023-11-01 21:04:05 · 49 阅读 · 1 评论 -
set,map,multiset,multimap【详解】
set是按一定的次序存储元素的容器在set中,元素的value是唯一的,不可以重复,且为升序排序(和字典一样)set的底层是二叉搜索树,set中的元素不可以修改set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对子集进行直接迭代。5.对于map来讲,里面存储的是真正的,但是set底层实际上存储的是,所以在插入元素时,只需要插入value就可以,不需要搞键值对。原创 2023-11-14 21:14:58 · 51 阅读 · 0 评论 -
AVL树【图解】
/三叉链//存储的键值对int _bf;//balance factor平衡因子AVLTreeNode(const pair& kv)构造函数,_kv(kv),_bf(0)原创 2023-12-07 18:04:57 · 885 阅读 · 1 评论