C++
文章平均质量分 61
qq_43530773
win自动更新导致资料没了,这里作为备份用
展开
-
C++中的类型转换static_cast、dynamic_cast、const_cast和reinterpret_cast总结
本文出处:https://www.jb51.net/article/55885.htm这篇文章主要介绍了C++中的类型转换static_cast、dynamic_cast、const_cast和reinterpret_cast总结,需要的朋友可以参考下。前言:C++中的类型转换分为两种:1.隐式类型转换定义:隐式转换是系统跟据程序的需要而自动转换的。2.显式类型转换。定义:显式转换也叫强制转换,是自己主动让这个类型转换成别的类型。对于隐式变换,就是标准的转换,在很多时候,不经意间就发生了,比转载 2021-07-03 23:34:48 · 280 阅读 · 0 评论 -
C++ 函数中的不定参数
.定义所谓不定参数,指的就是在函数的定义中原创 2021-06-24 00:31:53 · 8113 阅读 · 1 评论 -
c++map与hash_map以及例题
mapmap底层由红黑树实现,不同的操作的时间复杂度为:插入: O(logN)查看:O(logN)删除:O(logN)hash_maphash_map底层由哈希表实现,不同的操作的时间复杂度为:插入:O(1),最坏情况O(N)查看:O(1),最坏情况O(N)删除:O(1),最坏情况O(N)两者的区别可参考:https://blog.csdn.net/weixin_42767099/article/details/82874555例题:LeetCode0001,两数之和题目描述:给定原创 2021-05-26 20:36:51 · 239 阅读 · 0 评论 -
c++ 启动外部可执行文件
本文参考:https://blog.csdn.net/Nancy_m/article/details/8643987.前言C库中函数int system(const char* command)用于执行外部可执行文件,其功能是调用DOS命令,因此需用到cmd命令。其特点为:1、他不会立即返回,直到你启动的程序执行完成。2、如果你启动是windows程序,它仍然会启动一个控制台,这就给人感觉太差劲了,但如果本身是控制台的,而且又需要等待它的完成,那这将是比较好的选择。3、它的返回值代表是否执行成功以原创 2021-05-12 02:47:02 · 1154 阅读 · 3 评论 -
C++中的IO流操作
.IO流的概念及流类库结构1、前言当程序与外界环境进行信息交换时,存在两个对象:一个是程序中的对象,另一个是文件对象。其中文件对象可以是磁盘设备,也可以是外部设备,C++将输入输出设备当做文件处理。流是一种抽象,它负责在数据的生产者和数据的消费者之间建立联系,并管理数据的流动。2、流对象与文件操作程序建立一个流对象;指定这个流对象与某个文件对象建立连接程序操作流对象流对象通过文件系统对所连接的文件对象产生作用3、c++中的流对象.输出流1、预先定义的输出流对象cout 标准原创 2021-05-04 23:49:41 · 320 阅读 · 0 评论 -
(转载)c++优先队列(priority_queue)用法详解
既然是队列那么先要包含头文件#include <queue>, 他和queue不同的就在于我们可以自定义其中数据的优先级, 让优先级高的排在队列前面,优先出队优先队列具有队列的所有特性,包括基本操作,只是在这基础上添加了内部的一个排序,它本质是一个堆实现的和队列基本操作相同:top 访问队头元素empty 队列是否为空size 返回队列内元素个数push 插入元素到队尾 (并排序)emplace 原地构造一个元素并插入队列pop 弹出队头元素swap 交换内容定义:pri转载 2021-04-13 19:38:17 · 98 阅读 · 0 评论 -
【转载】C++容器和迭代器
一、顺序容器vector1.1 容器是什么在C++中,容器被定义为:在数据存储上,有一种对象类型,它可以持有其他对象或指向其他对象的指针,这种对象类型就叫做容器。简单理解,即容器就是保存其他对象的对象。而且,这种“对象”还有处理“其他对象”的方法。 容器是随着面向对象语言的诞生而提出的,它甚至被认为是早期面向对象语言的基础。现在几乎所有面向对象语言中都伴随着一个容器,C++中则是标准模版库(STL)。 C++采用基于模版的方式处理容器,STL中的容器提供了多种数据结构。1.2 容器的优转载 2021-03-14 09:40:40 · 213 阅读 · 0 评论 -
C++中sort()函数的用法以及如何对类按某一成员参数排序
.前言在编码时,对元素的排序是一个基础且重要的内容,我们已经学到了众多排序的算法,但那是否在每次使用的时候都要再编码一次?事实上,C++早已经给我们封装了一个极为便利的算法sort(),我们仅需要引入头文件< algorithm>即可使用。.语法描述sort()函数中需要三个参数:sort(begin,end,cmp),其中:begin为指向待排序的数组的第一个元素的指针end为指向待排序的数组的最后一个元素的下一位置的指针cmp为可选参数,作为我们排序的准则。在无第三参数的情况下原创 2021-03-08 00:45:02 · 3355 阅读 · 1 评论 -
各类排序算法
.前言1、本文是个人关于一些排序算法的笔记,参考:https://blog.csdn.net/qq_42453117/article/details/996808312、本文会使用C++和java进行实现另:由于在排序中会大量用到两个元素间的值的交换,利用之前的C++穴道的模板的知识,先建立一个用于交换的函数:template<class T>void mySwap(T& x,T& y){ T temp = x; x = y; y = temp;}这样原创 2021-03-05 14:55:13 · 137 阅读 · 1 评论 -
C++栈类模板与应用
.前言栈是只能从一段访问的线性群体,是一种后进先出的数据结构。.特点1、栈中的元素遵守“先进后出”(First In Last Out)的原则,简称FILO结构。2、限定只能在栈顶进行插入和删除操作。注:函数调用和返回的过程底层处理都是依靠栈实现的.基本操作1、弹栈,通常命名为pop2、压栈,通常命名为push3、求栈的大小4、判断栈的状态(满、空)5、获取栈顶元素的值6、初始化7、清空栈.栈类模板代码#ifndef STACK_H#define STACK_H#inclu原创 2021-03-04 20:36:48 · 537 阅读 · 1 评论 -
C++中的节点类与链表类及链表操作
链表能使人随时方便的插入删除元素,不太影响其他元素。.顺序访问的线性群体——链表类1、链表是一种动态数据结构,可以 用来表示顺序访问的线性群体(即你无法像数组那样通过下标灯光方式直接访问元素,需得知开始坐标往下找)。2、链表是由系列节点组成的,节点可以在运行时动态生成。3、每一个节点包括数据域和指向链表中下一个节点的指针(即下一个节点的地址,需要依赖它维持节点与节点间的次序关系)。如果链表每个节点中只有一个指向后继节点的指针,则该链表称为单链表。注:在使用数组的时候,我们是靠数组的物理地址的次序原创 2021-03-03 16:55:29 · 5096 阅读 · 1 评论 -
C++中的数组类模板有关笔记
之前说过C++中的类模板可以容纳任何类型的数据,那能否建立一个通用的组(类)使得也能够容纳任何类型的数组?.直接访问的线性群体——数组类.静态数组是具有固定元素个数的群体,其中的元素可以通过下标直接访问。.缺点:大小正在编译时就已经确定,在运行时无法修改.动态数组有一系列位置连续的,任意数量相同类型的元素组成.优点:其元素个数可以在程序运行时改变.动态数组类模板程序#ifndef ARRAY_H#define ARRAY_H#include <cassert>//提供宏asse原创 2021-03-02 22:17:36 · 223 阅读 · 0 评论 -
C++中的模板功能介绍
.前言C++中的模板分为函数模板和类模板。在C++中,模板允许我们处理问题的逻辑从不同的数据类型中抽离出来,形成容器和算法。当我们需要对某种数据进行存取和处理的时候,我们可以在程序中,选择合适的模板指定我们需要的数据类型,这个时候,编译器就会为我们生成适合这种类型的容器和算法函数。.函数模板1、情景多个一样或几乎完全一样的重载函数体带来的问题不仅是冗余,还有就是当你打算修改算法的时候,如果你没有在各个函数体里进行同步修改的话,还会造成在同一系统中,处理同类型的问题,用的算法不一致,导致不一致性的原创 2021-03-01 00:58:04 · 1866 阅读 · 0 评论 -
C++中的抽象类以及与虚基类的异同
1.抽象类要了解抽象类首先需要什么是纯虚函数1、纯虚函数纯虚函数是一个在基类中声明的虚函数,它在该基类中没有定义具体的操作内容,要求各派生类根据实际需求定义自己的版本,纯虚函数的声明格式为virtual 函数类型 函数名(参数表)=0;即在一个虚函数的声明语句的分号前加上=0,即可将一个虚函数变成纯虚函数,其中,=0只能出现在类内部的虚函数声明语句处。纯虚函数只用声明,而不用定义,其存在就是为了提供接口,含有纯虚函数的类是抽象基类.纯虚函数必须在子类中被重写。抽象类只能作为派生类的基类,不能定原创 2021-02-27 21:06:59 · 3358 阅读 · 1 评论 -
C++中的虚函数
.前言虚函数是实现动态绑定的函数,在C++中虚函数的作用是实现多态的机制。常用情景是需要用基类类型的指针指向其派生类的实例,然后通过基类指针去调用派生类实例的成员函数。.情景我们希望定义一个基类和多个派生类,他们都有同样的名字的成员函数,但实现细节不同,我们希望通过一个通用函数根据传入的类的对象去调用各类的函数。代码:#include <iostream>using namespace std;class Base1//基类Base1定义{public: void disp原创 2021-02-27 20:37:29 · 1700 阅读 · 0 评论 -
在C++中的运算符重载操作
.运算符重载有时希望对象之间也能用这些运算符进行运算,以达到使程序更简洁、易懂的目的。例如,复数是可以进行四则运算的,两个复数对象相加如果能直接用+运算符完成,不是很直观和简洁吗?运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造。实现方法是通过函数实现,分为重载为类的非静态成员函数和重载为非成员函数(原因:不是所有的运算符都能在类体里重载的)。其实质是编写以运算符作为名称的函数。C++ 语言支持各种关系运算符( < 、 > 、 <= 、 >= 、 == 等等)原创 2021-02-23 22:17:39 · 651 阅读 · 0 评论 -
C++基类与派生类类型转换以及虚基类
参考:https://www.jb51.net/article/72586.htm#.C++基类与派生类的转换在公用继承、私有继承和保护继承中,只有公用继承能较好地保留基类的特征,它保留了除构造函数和析构函数以外的基类所有成员,基类的公用或保护成员的访问权限在派生类中全部都按原样保留下来了,在派生类外可以调用基类的公用成员函数访问基类的私有成员。因此,公用派生类具有基类的全部功能,所有基类能够实现的功能, 公用派生类都能实现。而非公用派生类(私有或保护派生类)不能实现基类的全部功能(例如在派生类外不能转载 2021-02-22 21:23:33 · 532 阅读 · 0 评论 -
C++中的vector
.说明1、vector是向量类型,可以容纳许多类型的数据,因此也被称为容器2、(可以理解为动态数组,是封装好了的类)3、进行vector操作前应添加头文件#include .为什么需要vector?1、用于封装任何类型的动态数组,自动创建和删除2、数组下标越界检查.格式vector<元素类型> 数组对象名(数组长度)//方法一//建立大小为10的数组,没有初值,每个元素的值不确定vector<int> a(10);//方法二//定义具有10个整型元素的向量,转载 2021-02-21 01:41:37 · 111 阅读 · 0 评论 -
C++动态分配(new和malloc的用法及区别)
参考:https://blog.csdn.net/zhong29/article/details/80930919https://blog.csdn.net/nyist_zxp/article/details/80810742一、malloc和free1、函数声明:void *malloc(int size);说明:malloc向系统申请分配size字节的内存空间,返回类型为void*类型;2、使用int* p;p = (int*)malloc(sizeof(int));free(p);原创 2021-02-21 00:47:43 · 8282 阅读 · 0 评论 -
C++中的前向引用声明与补足措施(对象指针)
前向引用声明C++中类应该先声明后使用,但当代码中有两个类需要相互引用的时候,不管哪一个类声明在前,都会导致类未定义的编译错误。例:class A{public: void f(B b);//报错信息为:'B' (add forward declaration)?};class B{public: void f(A a);};如果需要在某个类的声明之前,引用该类,则应该进行前向引用声明,例:class B; //前向引用声明class A{public: v原创 2021-02-20 15:39:20 · 661 阅读 · 2 评论 -
C++中指向函数的指针
由于函数在内存中也占据存储空间的,也是有起始地址的,因此也可以用指针指向函数起始地址,即可以使用指针调用对应函数。.函数指针的定义格式:存储类型 数据类型 (*函数指针名)()注1:将*和函数名的连起的括号不可少,否则就会成为指向函数的指针(即返回一个指针类型的函数)注2:函数类型必须匹配要调用的函数类型,函数形参表要匹配调用的函数形参表。如:int max(int a,int b);int min(int a,int b);int (*fun)(int a,int b);含义函数指针原创 2021-02-18 22:09:12 · 443 阅读 · 0 评论 -
c++预编译处理
.定义预编译又称为预处理 , 是做些代码文本的替换工作。处理 # 开头的指令 , 比如拷贝 #include 包含的文件代码, #define 宏定义的替换 , 条件编译等,就是为编译做的预备工作的阶段,主要处理#开始的预编译指令,预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置,其存放在内存中的临时文件。预处理指令是以#号开头的代码行。#号必须是该行除了任何空白字符外的第一个字符。#后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符。整行语句构成了一条预处理指令转载 2021-02-16 19:55:17 · 588 阅读 · 0 评论 -
共享数据保护及const作用总结
一、常类型常类型的对象必须进行初始化,而不能被更新。二、常类型的分类.常对象:必须初始化,不能被更新。格式:类名 const 对象名常成员:用const进行修饰的类成员:1、常数据成员使用const说明的数据成员注:类的常数据成员的初始化只能在构造函数的初始化列表中初始化,不能放在函数体中初始化。2、常函数成员。a.使用const关键字b.常成员函数不更新对象的数据成员c.格式:类型说明符 函数名(参数表) const;d.const关键字可以被用于参与对重载函数的区别。e.通过原创 2021-02-16 01:00:18 · 136 阅读 · 0 评论 -
C++友元函数与友元类
类的友元.友元是C++提供的一种破坏数据封装和数据隐藏的机制。.通过将一个模块声明为另一个模块的友元,一个模块能够引用到另一个模块中本是被隐藏的信息。.可以声明友元函数和友元类。.为了确保数据的完整性,以及数据封装与隐藏的原则,慎用友元。友元函数.友元函数时砸类声明中有关键字friend修饰声明的非成员函数(其不属于类),在它的函数体中能够通过对象访问private和protected成员。.作用:增加灵活性,使程序员可以在封装和快速性方面做合理选择。.访问对象中的成员必须通过对象名。例:原创 2021-02-14 23:10:33 · 116 阅读 · 0 评论 -
C++中的枚举类
枚举类定义格式enum class 枚举类型名:底层类型{枚举值列表};默认的底层类型是int型,但是新的C++标准中可以自定义底层类型。如:enum class Type {General,Light,Medium,Heavy}; //底层类型默认是int型enum class Type: char{General,Light,Medium,Heavy}; enum class Category{General=1,Pistol,MachineGun,Cannon};枚举类优势原创 2021-02-14 21:43:19 · 725 阅读 · 0 评论 -
C++中的构造函数与析构函数
一、构造函数.作用当一个类的对象被创建的时候,编译系统会为对象分配内存空间,并自动调用该构造函数,为实例对象完成初始化工作,即构造函数的作用是初始化对象的数据成员。.构造函数的形式1、函数名与类名相同2、不能定义返回值类型,也不能有return语句3、可以有形式参数,也可以没有形式参数4、可以是内联函数5、可以重载6、可以带默认参数值(与重载不可同时存在).构造函数的分类1、默认构造函数调用时可以不需要实参的构造函数类名 对象名;.参数表为空的构造函数注1:在类定义中若没有写构造原创 2021-02-14 00:47:26 · 169 阅读 · 0 评论 -
C++中的面向对象(四大基本特征与五大原则)
面向对象的基本特点包括:抽象、封装、继承、多态。1、抽象:指对同一类对象的共同属性和行为进行概括,而暂时不解释部分细节,形成类或接口。抽象包括两方面:数据抽象和过程抽象。.数据抽象:描述某类对象的属性或状态(类的属性)过程(代码)抽象 :描述某类对象的共有的行为特征或具有的功能(类的方法)抽象的实现:类2、封装:指将抽象出的数据、代码封装在一起,形成类。目的:增强安全性和简化编程,使用者不必了解具体的实现细节,而值需要通过外部接口,以特定的访问权限,来使用类的成员3、继承:指在已有类的原创 2021-02-11 23:14:24 · 1925 阅读 · 0 评论 -
带默认参数值的函数及函数重载
.带默认值的函数1、定义在定义函数时,可以给函数的形参预先设定预定值,调用函数的时候,如果给出实参,则采用实参值,否则采用预先设定的默认参数值,如:void func(int a=3,int b=4){ cout << a << " " << b<<endl;}int main(){ func();//使用默认参数 func(1, 2);//使用形参 //结果是3 4 1 2}注意:1.有默认参数的形参必须列在形参列表最右,即默原创 2021-02-10 22:56:36 · 2110 阅读 · 0 评论 -
关于inline的用法
内联函数1.定义2.内联函数与其他函数的区别3.使用规则4.使用范围5.内联函数与宏的区别6.内联函数的优缺点1.定义以inline 修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开。它的优点是没有函数压栈的开销,内联函数提升程序运行的效率。2.内联函数与其他函数的区别1)内联函数是直接复制“镶嵌”到主函数中去的,就是将内联函数的代码直接放在内联函数的位置上,这与一般函数不同,主函数在调用一般函数的时候,是指令跳转到被调用函数的入口地址,执行完被调用函数后,指令再跳转载 2021-02-10 17:04:18 · 651 阅读 · 0 评论 -
引用类型及与指针的比较(C++笔记)
引用是C++在C语言上延伸的一种新的机制,是对C语言中指针的功能的一种新的实现方式。引用类型.引用(&)是标识符的别名,即变量的别名。.在定义一个引用时,必须同时对它初始化,使它指向一个已存在的对象。int i=10;int& ri=i;//定义int引用ri,并初始化为变量i的引用此时ri相当于变量i的另一个别名,操作ri等效操作i;int i = 10;int& ri = i;ri--;cout << ri << endl;cout原创 2021-02-09 15:42:06 · 692 阅读 · 1 评论 -
C++函数的参数传递(三种传参形式)
函数的参数传递共三种:传值、传指针和传引用。其中后两种功能类似。传值参数传递到函数后,只是一个局部变量,修改这个变量无法改变实参的值,即这是个单向传递。void add(int x){x++;}int main(){int b=1;add(b);//函数完成后b的值不变}传指针理论上讲,传进函数里的同样也是一个值,但这个值实质上是一个地址,因此修改这个指针无法影响外部的指针,即形成与实参是两个相互独立的指针。但是,在形参所指的地址改变前,通过指针里面保存的地址来修改指针保存的地原创 2021-02-06 23:53:26 · 4071 阅读 · 1 评论 -
c++中的auto类型和decltype
auto:编辑器通过初始值自动判断变量类型格式:auto val=val1+val2;int a = 1, b = 2;auto c = a + b;//此时c的类型为整型此外,虽然auto同样可以在一个语句中声明多个变量,但需要声明的变量需要为同一类型。int i = 3;auto a = i,&b = i,*c = &i;//正确: a初始化为i的副本,b初始化为i的引用,c为i的指针.auto sz = 0, pi = 3.14;//错误,两个变量的类型不一样。编译转载 2021-02-06 19:39:53 · 120 阅读 · 0 评论 -
c++中的枚举类型
定义1、一般格式:enum 枚举名 {标识符列表};enum Weekday {SUN,MON,TUE,WED,THU,FRI,SAT};默认情况下SUN=,MON=1……以此类推。2、声明时指定枚举元素的值:enum Weekday {SUN=7,MON=1,TUE,WED,THU,FRI,SAT};后面的TUE、WED自动赋值运算枚举元素不能再次赋值,但可以进行运算与比较,也可以给整型变量赋值。enum Weekday {SUN=7,MON=1,TUE=2,WED=3,THU=4原创 2021-02-06 18:50:44 · 142 阅读 · 0 评论 -
typedef
typedef相关1、概述typedef的官方定义:Typedef does not work like typedef [type] [new name]. The [new name] part does not always come at the end.You should look at it this way: if [some declaration] declares a variable, typedef [same declaration] would define a typ转载 2021-01-27 19:24:40 · 85 阅读 · 0 评论 -
sizeof
sizeof 是一个关键字,它是一个编译时运算符,用于判断变量或数据类型的字节大小。sizeof 运算符可用于获取类、结构、共用体和其他用户自定义数据类型的大小。使用 sizeof 的语法如下:sizeof (data type)其中,data type 是要计算大小的数据类型,包括类、结构、共用体和其他用户自定义数据类型。原文链接:http://blog.csdn.net/w57w57w57/article/details/6626840摘要:、Sizeof的作用非常简单:求对象或者类型的转载 2021-01-16 21:33:27 · 90 阅读 · 0 评论 -
三目运算
三目运算可以代替简单的if语句如:if (a < b) x = a;else x = b;可替换成:x = (a < b) ? a : b;其结构是:表达式1 ?表达式2 :表达式3;其执行逻辑是若表达式1为真,则求表达式2,否则求表达式3。...原创 2021-01-15 22:00:24 · 76 阅读 · 0 评论 -
C++_逗号运算符
C++中逗号可以作为一个运算符,其作用是连接左右两个表达式,如:3+5,6+8;其会先执行逗号左边的表达式然后再执行逗号右边的表达式,两个表达式都计算完以后,以右边的表达式作为最终表达式的结果。例如:#include <iostream>int main(){ int a; //这里加括号是因为赋值运算等级要高于逗号运算 a = (3 + 5, 8 + 8); std::cout << "a="<<a<<std::原创 2021-01-15 21:46:44 · 2007 阅读 · 2 评论