
C++
文章平均质量分 70
子春_贰叁
Because we are young and fearless
展开
-
C++中vector作为参数的三种传参方式(传值 && 传引用 && 传指针)
c++中常用的vector容器作为参数时,有三种传参方式,分别如下:function1(vector vec),传值function2(vector &vec),传引用function3(vector *vec),传指针注意,三种方式分别有对应的const形式,不在此讨论。三种方式对应的调用形式分别为:function1(vec),传入值function2(vec),传入引用function3(&vec),传入地址三种方式的效果分别为:会发生拷贝构造不会发生拷贝构造不转载 2021-02-01 16:09:54 · 5416 阅读 · 3 评论 -
关于堆栈问题的一些总结
文章目录堆栈溢出为什么栈向下生长,堆向上增长?堆栈区别堆栈溢出栈溢出:创建进程时,会分配一个2M的栈空间,当递归函数调用过多时就会导致栈溢出堆溢出:实际上与栈溢出同理(都是因为向一个固定大小的空间中,分配了过多的数据),因为操作系统给每个进程分配的最大堆的空间就是4G,当超出这个上限时就会发生堆溢出(比如说创建一个过大的数组)如何解决递归函数引起的栈溢出?使用尾递归,尾递归就是return时调用函数本身T func(num_1,num_2){ if(num_1 == 2)原创 2021-01-29 19:07:44 · 1151 阅读 · 2 评论 -
C++中的四种强制类型转换总结
文章目录static_castreinterpret_castconst_castdynamic_castC++中四种强制类型转换符:static_cast, reinterpret_cast, const_cast, dynamic_cast注意:C++兼容C语言所以也支持C语言的转换风格static_caststatic_cast用于非多态类型的转换(静态转换),编译器隐式执行的类型转换都可以用static_cast,但是不可用于两个不相关的类型转换int main(){ doubl原创 2021-01-05 15:54:13 · 212 阅读 · 0 评论 -
C++中的auto_ptr,unique_ptr,shared_ptr智能指针总结
文章目录auto_ptrunique_ptrshared_ptr先来看一看智能指针的发展历史C++98产生了第一个智能指针auto_ptrC++ boost给出了scoped_ptr和shared_ptr和weak_ptrC++TR1 引入了shared_ptr(TR1为非标准版)C++11引入unique_ptr和shared_ptr和weak_ptr这些智能指针参考boost中的智能指针实现保证new生成的对象在程序的任何位置都可释放RAII思想:一种利用对象生命周期来控制程序资源,在原创 2021-01-04 17:38:04 · 155 阅读 · 0 评论 -
C++11中的异常总结
异常:异常是一种处理错误的方式,当一个函数发现自己无法处理这个错误时,就让函数的直接调用者或者间接调用者去处理这个错误异常的使用机制throw: 通过throw关键字,当程序出现问题时,程序会抛出一个异常catch: catch关键字用于捕获异常,在想要处理问题的地方,通过异常处理程序捕获异常,可以有多个catch进行捕获try: try块的代码标识将被激活特定异常,后面通常跟着一个或多个catch块try{ //保护的标识代码}catch(ExceptionName e1){原创 2021-01-03 18:02:44 · 477 阅读 · 0 评论 -
C++11中的lambda表达式总结
最近在复习的时候遇到了lambda表达式,所以来总结下什么是lambda表达式先来看一看格式[capture-list](parameters)mutable->return-type{statement}/*[捕捉列表](参数列表)修饰符->返回值类型{函数体}[capture-list]:捕捉列表,编译器通过[]来判断接下来的代码是否为lambda函数,捕捉列表可以捕捉上下文中的变量供lambda函数使用(parameters):参数列表,如果不需要参数传递,则可以连同()一起省略原创 2021-01-03 17:54:31 · 251 阅读 · 1 评论 -
c++中多态总结
文章目录多态概念override和final关键字抽象类多态实现原理编译时多态与运行时多态多态概念什么是多态:为了完成某个功能,调用不同的对象去完成时会产生不同结果,满足对象类型是父类就调用父类的函数,是子类就调用子类的函数,完成正确调用如何构成多态(条件1,2同时满足):1.通过父类指针或引用调用虚函数2.被调用的函数为虚函数,且子类对父类的虚函数进行重写,虚函数的覆盖(覆盖指的是虚表中虚函数的覆盖,覆盖是原理层的叫法,在语法上叫做重写)class A{public: virtual v原创 2021-01-03 17:38:10 · 298 阅读 · 1 评论 -
c++中的继承总结
文章目录继承菱形继承继承什么是继承:根据另一个类来定义另一个类,是代码复用的重要手段,继承是类设计层面的复用继承作用:允许在保持原有类属性的基础上进行扩展,产生新的类,新产生的类叫做派生类继承定义class A{public: func_1() {}protected: int a; char b; };class B : public A //A为父类(基类),B为子类(派生类){public: int c;};继承方式:pu原创 2021-01-03 17:14:49 · 154 阅读 · 0 评论 -
c++中关于哈希的总结
文章目录哈希概念哈希函数哈希冲突哈希应用哈希切割hash_map哈希概念先来看一下对hash的解释,把任意长度的输入通过散列算法换成固定长度的输出,这个输出值就是散列值,通常这种转换是压缩映射,散列值的空间小于输入空间,不同输入有可能会散列出相同的输出,所以不能从散列值确定唯一的输入,hash是一种思想,通过散列函数(哈希函数)将元素的存储位置与该元素的关键码建立映射关系,这块空间(连续空间)被称作散列表或者哈希表,关键字所对应的地址称为散列地址,查找元素时的效率较高,在没有哈希冲突时,查询的时间复杂原创 2021-01-03 14:51:33 · 651 阅读 · 0 评论 -
c++中的string、vector、list、stack、set、map等常用STL容器总结
文章目录string类vectorliststackqueuepriority_queue(优先级队列)deque(双端队列)string类string类简介:1.string类是表示字符串的字符串类2. string在底层实际是:basic_string模板类的别名,typedef basic_string<char, char_traits, allocator> string3. 不能操作多字节或者变长字符的序列常用接口void Teststring(){ stri原创 2020-12-30 16:38:25 · 1535 阅读 · 0 评论 -
关于C/C++的一些小知识点总结(不定时更新)
文章目录内联函数宏结构体内存对齐初始化列表内联函数什么是内联函数?使用inline修饰的函数叫做内敛函数,在编译时C++编译器会在调用内联函数的位置展开,所以没有函数压栈的开销,因此内敛函数提高了程序运行的效率特性:1.inline是一种以空间换时间的做法,省去调用函数开销,所以代码很长或者有循环/递归的函数不适合使用内联函数2.inline对于编译器来说只是一个建议,编译器会自动优化。如果定义为inline的函数体内有循环/递归,编译器优化时会忽略内联函数3.inline不建议将声明和定义分原创 2020-12-29 15:57:58 · 205 阅读 · 1 评论 -
深拷贝与浅拷贝总结
先总的来看深拷贝与浅拷贝,拷贝就是我们所说的复制,可以通过生活中的一些例子来深入了解,比如我们有一栋房子,深拷贝就是我们按照这个房子的规格重新在另一个地方建造了一座一摸一样的新房子,而浅拷贝就是给这个房子配了一把钥匙,此时有两把钥匙可以进入这个房子,当钥匙多了,可以进入这个房子的人也就多了,而深拷贝建造了一个新房子,当初始的房子销毁掉,那么我们还有拷贝的房子可以使用,风险更小,所以使用深拷贝更安全深浅拷贝概念:深拷贝:在内存中开辟一块新地址用来存放复制的对象浅拷贝:指向被复制的内存地址,如果这块内存数原创 2020-12-29 11:32:34 · 214 阅读 · 0 评论 -
C++中的this指针总结
什么是this指针?this指针本质上是一个成员函数的形参,对象调用成员函数时,将对象地址作为实参传递给this形参,所以对象中不存储this指针this指针的特性1.this指针的类型:类类型* const2.只能在“成员函数”的内部使用3.this指针本质上是一个成员函数的形参,对象调用成员函数时,将对象地址作为实参传递给this形参,所以对象中不存储this指针4.this指针是成员函数第一个隐含的指针形参,一般情况下由编译器ECX寄存器自动传递,不需要用户传递3.this指针存在哪里原创 2020-12-29 09:40:45 · 944 阅读 · 1 评论 -
C++11中的右值引用总结
要了解右值引用是什么,先来看一看什么是右值?一般认为可以取地址的称为左值,如果表达式的运行结果是一个临时变量或者对象则认为是右值,在c++11中对右值进行了严格的区分:分为了纯右值和将亡值纯右值:如 1,2,3,a + b将亡值:如表达式的中间结果、函数按照值的方式进行返回(临时对象)int g_a = 10;//函数返回值结果为引用int& Func_A() { return g_a;}int main() { int a = 10; int b = 10; a = b;原创 2020-11-09 20:59:23 · 278 阅读 · 0 评论 -
C++中的内存泄露总结
什么是内存泄露?程序未能释放已经不再使用的内存的情况,为应用程序分配内存之后,因设计错误,失去了对该内存的控制,造成了内存的浪费,一般来说就是申请了一块内存,使用完毕之后忘记释放内存泄露的危害出现内存泄露会导致响应越来越慢,最终死机void MemoryLeaks(){ // 1.内存申请了忘记释放 int* p1 = (int*)malloc(sizeof(int)); int* p2 = new int; // 2.异常安全问题 int* p3原创 2020-11-09 20:50:25 · 322 阅读 · 0 评论 -
什么是重载,覆盖(重写),隐藏(重定义)
#[TOC]重载重载是什么:函数重载是函数的一种特殊情况,c++允许在同一作用域中声明几个功能类似的同名函数,这些函数的形参列表(参数个数或类型或顺序)必须不同,对返回值不做要求,因为无法通过改变参数列表来判断调用的是那一个重载函数。注意点:1.函数重载在同一作用域2.函数重载与返回值无关3.类静态成员函数可以和普通成员函数构成重载int add(int a,int b){ return a+b;}double add(double a,double b)//返回值,参数类型不原创 2020-10-22 22:25:01 · 2721 阅读 · 0 评论 -
nullptr和NULL总结
C语言中的NULL在C语言中是一个宏,被定义为NULL为(void*)0#define NULL (void*)0C++中的NULLNULL被定义为0或者无类型指针(void*)常量#ifndef NULL#ifdef __cplusplus#define NULL 0#else#define NULL ((void *)0)#endifvoid Test(){ int* t1 = NULL; //将指针t1的值赋为0 int* t2 = 0; //认为t2为空指针}可原创 2020-10-18 18:16:33 · 507 阅读 · 0 评论 -
C++中的模板总结
文章目录模板概念函数模板类模板模板的特化模板概念对于重载函数来说,C++的检查机制能够通过参数和所属类的不同去调用不同的重载函数,例如,当我们需要求两数最大值时,定义man()函数的不同重载版本int max(int x ,int y){ return (x > y) ? x : y ;}float max(float x ,float y){ return (x > y) ? x : y ;}但是如果在main函数中,定义了double x,y,执行max(x,y);原创 2020-10-11 17:42:28 · 458 阅读 · 0 评论 -
C/C++中的内存管理总结
文章目录1.C语言中的动态内存分配2.C++中的动态内存分配3.malloc/free和new/delete异同点1.C语言中的动态内存分配动态内存申请函数:malloc / calloc /realloc1.*void malloc( size_t size )(动态内存开辟函数) 申请的空间是连续可用的返回指向这块空间的指针,不会对申请成功的内存初始化2.*void calloc( size_t num, size_t size )(为num个大小为size的元素开辟一块空间,并且将此空间每原创 2020-10-11 12:10:14 · 378 阅读 · 0 评论 -
C++中的引用是什么
1.什么是引用?引用就是给已经存在的变量取得一个别名,而不是新定义一个变量。编译器不会为引用变量开辟新得内存空间,引用变量和引用的变量共用同一内存空间。引用格式:int a = 10;int& ra = a; //定义引用类型2.引用的使用规则:1.引用在定义时必须初始化2.一个变量可以有多个引用3.引用一旦引用一个实体,不能再引用其它实体注意:引用取别名时,变量访问的权限只能缩小不能放大const int a = 10;//int& ra = a; // 该语句编译原创 2020-10-01 12:09:21 · 3113 阅读 · 0 评论 -
C++中类的默认成员函数总结
文章目录1.构造函数2.析构函数3.拷贝构造函数4.赋值运算符重载5.取地址和const取地址操作符重载1.构造函数概念:构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每一个成员都有一个合适的初始值,并且在对象的生命周期内只调用一次注意:构造函数的任务是初始化对象,而不是开空间创建对象,但是类中的数据成员不能在声明类的时候初始化,因为类不是一个实体,而是一种特殊的数据类型,不占据存储空间特征:1.函数名与类名相同2.无返回值3.对象实例化编译器自动调用对应原创 2020-09-27 20:30:06 · 661 阅读 · 0 评论 -
auto关键字与范围for循环语句(C++11)
目录1.auto关键字2.范围for1.auto关键字1.auto关键字(自动类型推导)在C++11中auto有了全新的含义:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得1.举几个例子int TestAuto(){ return 10;}int main(){ int a = 10; auto b = a; auto c = 'a'; auto d = TestAuto(); cout <<原创 2020-05-27 20:55:24 · 2275 阅读 · 0 评论