C++
本人整理的C++相关知识点,望共同学习,共同进步!
耀个丸子~
这个作者很懒,什么都没留下…
展开
-
【C++】C++11---lambda表达式
lambda是c++11非常重要也是最常用的特性之一,他有以下优点:●可以就地匿名定义目标函数或函数对象,不需要额外写一个函数●lambda是一个匿名的内联函数其中 capture是捕获列表, params是参数列表,ret是返回值类型,body是函数体。捕获列表[]:捕获一定范围内的变量 参数列表():和普通函数的参数列表一样,如果没有参数参数列表可以省略不写。原创 2024-05-19 14:50:07 · 340 阅读 · 0 评论 -
【C++】哈希表
哈希表(Hash Table)是一种用于存储“键值对”的基本数据结构。在C++中,哈希表使用“哈希函数”来计算数组的索引,进而存取数组中对应索引位置的值。计算索引的过程被称为哈希(hash)。 哈希表也叫散列表,散列表是数组结构。可以根据一个key值来直接访问数据,因此查找速度快。说到访问数据,在最基本的几个数据结构中,数组是查询效率是最高的。它可以直接通过数组下标来访问数据。原创 2024-05-12 01:02:24 · 703 阅读 · 0 评论 -
【C++】递归例题
1201:菲波那契数列本篇例题均来自于信息学奥赛一本通1201:菲波那契数列时间限制: 1000 ms 内存限制: 65536 KB提交数:43709 通过数: 25800【题目描述】菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。给出一个正整数a,要求菲波那契数列中第a个数是多少。【输入】第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数a(1<=a<=20)。【输出】原创 2024-05-10 14:18:17 · 728 阅读 · 0 评论 -
【C++】递归
递归实现:函数的自调用无限递归会导致栈溢出/暴栈代码是一行一行执行的,第一步不结束是不会执行第二步的。综上所述:递归的结束条件必须有,写在递归函数上边递归函数先递归前进,通过递归结束条件开始递归回退递归特点:先进后出。原创 2024-05-10 13:52:23 · 292 阅读 · 0 评论 -
【C++】Vector数组初始化
1.设置数组长度的默认初始N为默认数组长度,默认初始值为02.设置数组长度的给定值初始N为默认数组长度value为初始值3.直接给定数据4.动态改变长度(主要调用vector 中的resize()函数)原创 2024-05-10 13:39:50 · 160 阅读 · 0 评论 -
【C++】面试宝典--12、如何让main函数之前执行函数?
C++中在main 函数之前定义一个全局对象,调用构造函数。原创 2024-03-30 13:01:25 · 123 阅读 · 0 评论 -
【C++】面试宝典--6、局部变量能否和全局变量重名?
●局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。●能,局部会屏蔽全局,要用全局变量,需要使用” :: ”原创 2024-03-30 12:55:58 · 95 阅读 · 0 评论 -
【C++】常成员函数
常成员函数类的成员函数后面加const,表明这个函数不会对这个类对象的数据成员(准确地说是非静态数据成员)作任何改变。就是常成员函数返回值 函数名 (形参表) const {函数体} //常成员函数的定义方式返回值 函数名 (形参表) const;//常成员函数的声明方式注:(函数在类内声明和类外实现分离时) const是函数声明的一部分,在函数的实现部分也需要加上const.通俗的一句话就是被const修饰的变量不可修改。但是前边加上mutable关键字,就可以被修改了,具体解析在最后边。原创 2024-03-25 20:54:58 · 1000 阅读 · 0 评论 -
【C++】模板
return 1;return 0;return -1;stk.pop();原创 2024-05-09 20:47:30 · 100 阅读 · 0 评论 -
【C++】面试宝典--10、指针与数组的区别?
●数组对应着一块内存,而指针是指向一块内存。数组的地址和空间大小在生命周期不会发生改变,内容可能会发生改变,而指针指向的内存大小可以随时发生改变。当指针指向常量字符串时,它的内容不可以改。●对数组用&和对指针&的意义不同,此时数组名不在当成指向一个元素的常量指针来使用。计算出数组的元素个数,无法计算指针所指向内存的大小。●数组名类似指针常量,指针是指针变量。●计算容量的区别:用。原创 2024-03-30 13:00:08 · 73 阅读 · 0 评论 -
【C++】拷贝构造函数
拷贝构造函数的参数必须是引用类型的--其他构造函数参数都是基本类型(int char) 编译器自带的数据类型,拷贝构造函数的参数是一个同类型的对象-->用一个对象创建一个新的对象,拷贝构造函数是把对象当作参数传入,利用传入的对象生成一个新的对象,而赋值运算符是将对象的值赋值给一个已经存在的实例。调用的是拷贝构造函数还是赋值运算符,主要看是否有新的对象产生。--拷贝:创建一个新的对象,(本来有一个)-->使用场景:●使用一个对象创建一个新的对象。原创 2024-04-07 10:09:51 · 208 阅读 · 0 评论 -
【C++】面试宝典--5、定义和声明的区别
●声明是告诉编译器变量的类型和名字,不会为变量分配空间●定义就是对这个变量和函数进行内存分配和初始化。需要分配空间,同一个变量可以被声明多次,但是只能被定义一次注意:声明:引入名称 定义:引入实体1.类的声明也就是定义2.同时赋初值的声明也就是定义,如int a=2;除非 :它声明了一个没有详细说明函数体的函数它包含一个extern定义符且没有初始化函数或函数体它是一个包含在一个类定义之内的静态类数据成员的声明它必须在最终程序的某处准确的定义一次。原创 2024-03-22 21:27:52 · 201 阅读 · 0 评论 -
【C++】面试宝典--8、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?
可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错。可以,在不同的C文件中以static形式来声明同名全局变量。原创 2024-03-30 12:58:50 · 115 阅读 · 0 评论 -
【C++】异常
/自定义异常类private:string msg;public:cout << "拷贝构造函数" << endl;MyExcetion m("-----异常:除数不能为0-----");//创建对象throw m;//抛出异常cout << "函数抛出异常就会被结束" << endl;e.what();cout << "程序继续执行没有被终止" << endl;原创 2024-05-09 20:54:55 · 335 阅读 · 0 评论 -
【C++】深拷贝与浅拷贝
●如果对象中含有指针变量却使用了浅拷贝构造,那么会导致两个指针变量指向同一块地址空间,那么在对象释放时会导致一块空间释放两次,编译器报错。 ●浅拷贝和深拷贝的区别在于两个指针变量指向的是一块空间还是指向不同的空间。如果没有创建内存的操作就是浅拷贝,否则是深拷贝。 ●对象中含有指针类型的成员变量时需要用深拷贝构造,否则用浅拷贝构造。浅拷贝:不同对象的指针指向同一块内存。浅拷贝会有内存泄漏的问题。编译器默认的拷贝构造函数是浅拷贝构造函数。类中有指针,需要区分浅拷贝和深拷贝。原创 2024-04-14 21:25:02 · 183 阅读 · 0 评论 -
【C++】运算符重载
运算符重载实质上是C++的一种多态,叫做静态多态原创 2024-05-09 20:36:16 · 229 阅读 · 0 评论 -
【C++】内联函数
以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销,内联函数提升程序运行的效率。 如果是一个几十行的函数,函数本身执行就很耗时,那调用函数、创建栈帧(每个栈帧对应着一个未运行完的函数。栈帧中保存了该函数的返回地址和局部变量。其实就是函数运行时开辟的函数栈。)的一两行可以忽略不计;但是如果一个函数本身就一两行,因为调用函数本身而产生的那一部分消耗,就格外突出,而宏或者内联的提前替换就显得格外优秀,提高了效率。原创 2024-05-09 20:44:25 · 297 阅读 · 0 评论 -
【C++】lambda
lambda是c++11非常重要也是最常用的特性之一,他有以下优点:●可以就地匿名定义目标函数或函数对象,不需要额外写一个函数●lambda是一个匿名的内联函数其中 capture是捕获列表, params是参数列表,ret是返回值类型,body是函数体。捕获列表[]:捕获一定范围内的变量参数列表():和普通函数的参数列表一样,如果没有参数参数列表可以省略不写。原创 2024-05-09 21:07:20 · 260 阅读 · 0 评论 -
【C++】面试宝典--11、将“引用”作为函数参数有哪些特点
●使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操 作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本;●使用指针作为函数的参数虽然也能达到与使用引用的效果,但是,在被调函数中同样要给形参分配存储单元,且需要重复使用"*指针变量名"的形式进行运算,这很容易产生错误且程序的阅读性较差;这时,被调函数的形参就成为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标对象(在主调函数中)的操作。原创 2024-03-30 13:00:44 · 98 阅读 · 0 评论 -
【C++】面试宝典--7、如何引用一个已经定义过的全局变量?
如果用引用头文件方式来用某个在头文件中声明的全局变量,假定你将那个变量写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。2.也可以用extern 关键字。1.可以用引用头文件的方式。原创 2024-03-30 12:57:28 · 100 阅读 · 0 评论 -
【C++】面试宝典--9、指针与引用的区别?
指针用sizeof计算大小结果不同,指针在32位内存下是四字节,在64位内存下是8字节,引用结果为类型大小。引用++和指针++表达的含义不同。自增运算结果不一样。引用++是变量的值++;指针是一个实体,需要分配内存空间;引用只是变量的别名,不需要分配内存空间。引用在定义时必须被初始化并且不能初始化为NULL,指针没有要求。8x8=64)(用户角度上讲,引用不单独占空间)指针:一个变量,存储的内容为一个地址;(没有NULL引用,有NULL指针)引用不能改变引用关系,指针随意。指针是间接访问,引用是直接访问。原创 2024-03-30 12:59:27 · 187 阅读 · 0 评论 -
【C++】实现string类
Debug版本:编译器会提供一些代码来检测是否是空指针、局部变量是否赋值了、是否是野指针等等。Release版本:不会帮我们生成代码检测。原创 2024-05-09 20:39:28 · 154 阅读 · 0 评论 -
【C++】单例模式
●私有化它的构造函数,以防止外界创建单例类的对象;●使用类的私有静态指针变量指向类的唯一实例;●使用一个公有的静态方法获取该实例。原创 2024-05-09 20:58:26 · 131 阅读 · 0 评论 -
【C++】面试宝典--4、this指针
一个对象的this指针并不是对象本身的一部分,不会影响`sizeof `(对象)的结果。this 作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。this指针是存在于类成员函数中,指向类对象的指针。this是一个关键字,同时是—个常量指针。this是指向当前对象的指针,哪个对象调用包含this指针的函数,this指向哪个对象。成员函数调用时,传递了一个隐含的参数,指向了函数所在类对象的地址。原创 2024-03-21 21:31:19 · 384 阅读 · 0 评论 -
【C++】九大排序算法之----选择排序
原理:每次选择当前区间内最小/最大进行交换。选择排序(使用最少的交换次数完成排序)时间复杂度:0 (n^2)空间复杂度:0(1)原创 2024-03-06 12:24:56 · 343 阅读 · 0 评论 -
【C++】STL数据结构与算法----list
【代码】【C++】STL数据结构与算法----list。原创 2024-03-06 12:56:07 · 314 阅读 · 0 评论 -
【C++】静态成员
这就意味着,static 成员变量不随对象的创建而分配内存,也不随对象的销毁而释放内存。全局数据区的变量都有默认的初始值0,而动态数据区(堆区、栈区)变量的默认值是不确定的,系统会给这个变量自动赋一个随机的值。当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。●静态成员函数只能直接访问静态成员变量和静态成员函数(因为没有this指针,因为访问普通的成员变量和成员函数前面都隐含了this)和类外部的其它函数。--不可以调用普通的静态成员变量和静态成员函数-->*原创 2024-03-20 21:05:45 · 1004 阅读 · 0 评论 -
【C++】九大排序算法之----插入排序
思想:将待排序数组分为有序表和无序表,每次从无序表中取出一个元素,插入到有序表的适当位置。一开始有序表是一个数,无序表是n-1个数。每遍历一次,有序表中元素个数增加一个,无序表中元素个数减少一个,重复n-1次,完成排序。时间复杂度:O(n^2)空间复杂度:O(1)原创 2024-03-06 12:35:29 · 281 阅读 · 0 评论 -
【C++】友元
朋友的朋友不是我的朋友 我的朋友不是我子女的朋友类的友元是定义在类外部,但有权访问类的所有私有成员。友元可以是一个函数,该函数被称为友元函数,友元也可以是一个类,被称为友元类。声明一个友元只需要在类定义中声明一个函数或者一个类并且前面加上关键字friend。注意:(1) 友元关系不能被继承。(2) 友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明。(3) 友元关系不具有传递性。原创 2024-03-21 21:37:38 · 167 阅读 · 0 评论 -
【C++】STL数据结构与算法----vector
知识点:STL---standard标准-template模板-library-库STL的出现,将原来的常用容器和操作进行封装,增加C++的编码效率1.容器 vector list stack queue set map2.迭代器 容器和算法之间的胶合剂3.算法 algorithm。原创 2024-03-06 12:54:11 · 328 阅读 · 0 评论 -
【C++】STL数据结构与算法----stack
栈-特点:先进后出、后进先出。原创 2024-03-07 20:53:59 · 329 阅读 · 0 评论 -
【C++】面试宝典--2、C++是不是类型安全的?
使用reinterpret_cast运算符把`pnum`从`int*`转变成`char*`类型并用于初始化`pstr`。两个不同类型的指针之间可以强制转换(用reinterpret_cast:重新诠释的转型)原创 2024-03-21 21:12:19 · 359 阅读 · 0 评论 -
【C++】结构体 及其例题
一个事务包含多种信息。原创 2024-03-06 12:42:40 · 377 阅读 · 0 评论 -
【C++】面试宝典--1、C++和C的不同以及面向对象的了解
面向对象:把数据和对数据的操作方法放在一起,做成一个相互依靠的整体,称之为对象,对同类对象抽象出共同特性,类中大多数数据只能用本类的方法进行处理。C++是面向对象的程序设计,对于C++,首先考虑的是如何构造一个对象模型,让这个模型配合对应问题,这样可以通过获取对象状态信息得到输出。封装:将一类事物的属性和行为抽象为一个类,使属性私有化,行为公开化,提高数据隐蔽性,复用性高(复用性即可以多次使用的特性)。继承:进一步将属性和行为抽象为一个父类,而每一个子类拥有父类的行为和属性,也有自己的行为和属性。原创 2024-03-21 21:10:17 · 184 阅读 · 0 评论 -
【C++】面试宝典--3、面向对象的三大特性
●继承:子类继承父类0的1特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。(针对一消息,不同的对象可以以适合自身的方式加以响应)多态:则是“一个接口,多个实现”,通过父类调用子类的成员,实现了接口重用,如父类的指针指向子类的对象。封装:隐藏了类的实现细节和成员数据,实现了代码模块化,如类里面的private和public。●封装:把属性(成员变量)和操作(成员函数)结合为一个独立的整体。继承:使得子类可以复用父类的成员和方法,实现了代码重用。原创 2024-03-21 21:16:07 · 122 阅读 · 0 评论 -
【C++】九大排序算法之----冒泡排序
采用相同的方法,再次遍历,将第二大的数,放在数组倒数第二的位置(即n-2的位置),以此类推,直至数组有序。当数组在整个遍历过程中,没有发生交换,说明待排序数组已经是有序的了,此时可以直接结束排序过程。从下到上,两两比较,将最大的数放在所有待排序元素的最后一位(即下标n-1的位置)//原理:每次比较相邻的两个元素,然后在满足一定条件情况交换相邻两个元素。时间复杂度(取决于运算的次数):O(n^2)空间复杂度(取决于额外开辟的空间):O(1)一趟冒泡(当前区间内,最大的一定会排在最后)原创 2024-03-04 20:00:23 · 337 阅读 · 0 评论 -
【C++】继承
●基类中除了私有的成员,其他成员在派生类中的访问属性总是以(继承方式,基类的访问属性)中安全性高的方式呈现。(安全性级别:私有>保护>公有)一个类可以继承自多个父类,他可以从多个基类继承数据和函数。凡是基类中私有的,派生类都不可访问。继承方式只会缩小成员的访问权限。原创 2024-02-05 22:05:13 · 349 阅读 · 1 评论 -
【C++】多态的实现
为了实现C++的多态,C++使用了一种动态绑定的技术。这个技术的核心是虚函数表。下面介绍虚函数表是如何实现动态绑定的。原创 2024-02-10 15:37:32 · 347 阅读 · 0 评论 -
【C++】初始化参数列表
1.只能在构造函数里使用该语法,可以给所有成员设置初始化参数(和函数默认参数像)。2.成员的构造顺序和在初始化参数列表中的顺序无关,与类中声明顺序有关。3.const类型和引用类型必须在初始化参数列表中初始化。引用和常量尽量在初始化参数列表中初始化。原创 2024-02-20 21:33:21 · 456 阅读 · 0 评论 -
【C++】this指针
一个对象的this指针并不是对象本身的一部分,不会影响sizeof (对象)的结果。this 作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。 this是指向当前对象的指针,哪个对象调用包含this指针的函数,this指向哪个对象。 this 一般在构造函数中使用,用来区分成员变量和参数。原创 2023-08-12 22:11:27 · 20 阅读 · 1 评论