
c++学习
文章平均质量分 79
Metallic Cat
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++征途 --- STL中的常用算法(下)
1.调用这个算法的时候我们需要准备三个容器,容器1和容器2是用来求交集的容器,容器3则是用来储存交集的容器。2.容器3在存储交集前必须具有足够的内存空间来存储交集:如果容器1和容器2一样大的话,那么容器3的大小要和容器1和容器2一样大如果容器1和容器不一样大的话,那么容器3的大小要和两个容器中大小较小的那个一样大这样就能够保证一定可以拥有足够的内存空间存储交集(如果不够就用resize方法调整容器大小)原创 2022-09-02 09:04:41 · 464 阅读 · 0 评论 -
C++征途 --- STL常用算法(上)
2.一个谓词(仿函数)过去,这个仿函数采用匿名函数对象的形式传递 --- 我们自己创建一个类P,然后在这个类中重载函数调用符(),在重载函数中写我们要实现的功能(注意for_each算法会将遍历到的元素作为参数传给仿函数,所以我们在声明重载函数的时候也要准备好对应类型的参数),创建好类后,直接以实例化一个匿名函数对象的形式调用重载函数来创建一个仿函数,然后将仿函数作为参数传给_func。2.这个find_if算法只要一找到符合条件的元素就会停止寻找,并返回一个指向找到的元素的位置的迭代器。...原创 2022-09-01 15:00:22 · 456 阅读 · 0 评论 -
C++征途 --- 内建函数对象
1.什么是函数对象:函数对象是通过内部重载了函数调用符()函数的类实例化出的对象2.什么是内建函数对象与其说是内建函数对象不如说是内建了一系列内部重载了函数调用运算符的类,我们可以通过这些类创建函数对象然后去调用类中的重载函数,每一个重载函数内的函数实现都不一样,它们都具有不同的功能,具体是什么功能由类来决定使用内建函数对象类来实例化内建函数对象的时候,需要我们引入头文件:#include 1.一元运算是指函数只有一个操作数,二元运算是指有两个操作数2.所谓的取反是指将得到的正数变为...原创 2022-09-01 10:13:19 · 481 阅读 · 0 评论 -
C++征途 --- 函数对象与谓词
对象调用函数调用运算符重载函数(operator())时为仿函数,如果 operator() 的返回值是bool类型的话,那么这个仿函数被称为谓词。这个第二个特点的意思就是:在普通的函数中所有的临时变量和参数都会在函数调用结束后被销毁,除非是全局变量/静态局部变量。但是在仿函数中,由于我们实际是通过对象调用成员函数,成员函数中可以有成员变量,而成员变量不会在函数执行完毕后就被销毁。通过重载了函数调用操纵符()的类实例化出的对象就是函数对象。当函数对象调用函数调用符重载函数的时候,就是一个仿函数形式。...原创 2022-08-31 23:24:53 · 214 阅读 · 0 评论 -
C++征途 --- map/multimap容器
这里用了一个比较巧妙的操作:我们是以匿名对组对象以及有参构造函数的形式插值到map容器中的,通过这种方式我们可以在插入元素后就将我们创建的对组自动销毁,这样子即实现了插入操作(所谓的插入操作即将我们传入的对组中的两个数据各拷贝一份后存到容器中)同时也节省了内存空间。1.一个map中的每个key值(索引)是唯一的,我们能够通过这个唯一的key在大量的数据中快速的找到特定的值 ---- 注意这里仅仅是说key值唯一,value值是可以重复的。答案是可以的,使用的方法是仿函数法 --- 和set容器一样。...原创 2022-08-31 22:17:13 · 285 阅读 · 0 评论 -
C++征途 --- set/multiset(集合)容器
当我们在调用insert方法向set容器中插入数据后,这个insert方法会返回一个对组(所谓的对组即由多个数据组合而成的一个复合数据),比如上面这个对组中包含了一个指向我们插入的位置的set迭代器和一个对插入是否成功做判断的bool值。2.向set容器中插入一个数据的时候,首先会将数据和容器中的所有数据比较一遍,看看有没有相同的数据,如果有的话,则判断该数据插入失败。2.当我们向set容器中插入多个一样的数据时,只有第一个插入的数据可以插入成功,其它一样的 数据都会插入失败。和其它的容器没什么区别。...原创 2022-08-31 16:06:02 · 1754 阅读 · 0 评论 -
C++征途 --- List链表容器
4.但是对于只支持前移和后移的迭代器a而言:1.它们不能够有 a = a +1 , a = a + 2这种操作,比如链表,它的每一个节点的地址都是随机分布的,第一个节点和第二个节点的内存空间的地址可能差很多也可能只差1,如果我们盲目的 a = a+1的话,得到的地址对应的内存空间可能是未分配的空间,这就会导致程序出错。1.假设我们让一个迭代器指向节点a,只要节点a不消失,无论链表怎样变动,迭代器指向的内存空间始终不变,我们使用这个迭代器的时候依然能访问到这个节点a --- 迭代器不失效。...原创 2022-08-31 11:15:40 · 1099 阅读 · 0 评论 -
C++征途 --- Stack(栈)容器和Queue(队列)容器
1.我们是能够获取栈的大小的,只要有一个数据入栈,栈的大小就加1,有一个出栈,栈的大小就减1,这样全程观察记录就能够获取栈的大小了。1.这个容器的特点是队头只能够出数据,队尾只能够入数据 --- 这样就实现了先进先出的数据结构。stack容器其实就是栈容器,遵循栈的先进后出原则 --- 先进去的后出来。4.栈容器也需要我们指定其泛型参数类型,以此来确定存到栈中的元素的类型。获取栈顶元素的栈容器内的成员方法是 : top( )将那个返回栈的大小改为返回队列的大小。2.elem代表的是我们要入栈的元素。...原创 2022-08-30 21:21:29 · 541 阅读 · 0 评论 -
C++征途 --- deque容器
先放入第一个元素到节点缓冲区中,然后如果我们想在第一个元素前面再加一个元素的话,deque容器中就会自动的再开辟一个缓冲区,然后将这个缓冲区的地址存放到中控区的节点的上面,然后再在这个新创建的缓冲区中添加元素,添加满后再开辟一个缓冲区(这样就实现了头部增减元素)尾部增减元素也同理,当节点缓冲区填满以后就会自动再开辟一个缓冲区,并将这个缓冲区的地址放到节点地址的下面,然后在这个缓冲区中添加元素。1.注意这里插入一个区间的数据指的是插入一个别的容器的区间的数据。一:在中控器中找到数据所属的缓冲区的地址。...原创 2022-08-30 17:13:52 · 520 阅读 · 0 评论 -
C++征途 --- Vector容器
2.后面的resize方法是用来控制容器的大小而不是容量的,当我们传入的参数大于当前容器的大小时,就会将容器的大小扩大到给定参数,并将多出来的元素位置用默认值0来填充(重载方法可以让我们指定填充的值),如果参数小于大小的话,则会将多余的元素删除。此时如果我们用 resize 重新调整容器的大小为3的时候,容器的容量是不会随着大小的改变而改变的,这样就导致了一个问题,一个容量为一万三千多个元素的容器是很大的,但是在这个容器中我们只用了几个元素来装数据,这就导致容器的很多内存空间都被浪费了。...原创 2022-08-30 15:19:25 · 1034 阅读 · 0 评论 -
C++征途 --- string容器
1.find函数的返回值 --- 这个返回值返回的是我们要找的字符串出现的位置(准确的来说是找到我们要找的字符串,然后将这个字符串的第一个字符的位置返回),注意位置的索引是从0开始的,也就是说第一个字符对应0,第二个对应1....一直往下。第一个是让一个string = 一个char*指针的赋值方式 --- 除了直接传一个char*指针以外,我们还可以传一个字符串,这是因为字符串的本质是一个char*指针,这个指针指向的是字符串的首字符。如果是某一方字符串结束的话,则判定字符串长的那方更大。...原创 2022-08-30 08:26:59 · 537 阅读 · 0 评论 -
c++征途 --- STL初识
通过迭代器对象调用其指向的容器中的自定义类型对象的成员有两种方式:1.解引用后得到对象本身然后用点操作符访问2.由于是指针,且获取的是对象的地址,所以可以直接用指针加箭头操作符的方式访问对象的成员(获取到指向对象的指针之后,我们可以通过指针+箭头操作符的方式访问对象的成员)(push_back()方法就是vector容器中的尾插法(在容器中的最后一个元素的后面插入一个元素))...原创 2022-08-29 20:27:31 · 287 阅读 · 0 评论 -
C++征途 --- 模板 --- 类模板
但是问题是,类模板中的成员函数都是在程序运行时被调用的时候才进行创建,这就导致在编译阶段我们的函数声明是无法跨文件链接到对应的函数实现的(根本就找不到函数),此时如果在只包含函数声明的文件中通过函数声明调用函数的话,程序会报出链接失败的错误,这个错误的意思就是函数无法链接到对应的函数实现,导致函数调用失败。2.参数模板化 --- 类确定,但是类中的模板参数类型不确定,我们将其模板化,将类中模板函数,等模板参数传入的时候再确定类中的模板参数类型。...原创 2022-08-29 14:25:07 · 268 阅读 · 0 评论 -
C++征途 --- 模板 -- 函数模板
但是使用了函数模板之后,我们可以用泛型来代替具体的类型,然后用泛型来写交换函数的实现代码,等具体调用函数的时候,只需要将具体的类型传给泛型后就能使用这个函数模板实现两数交换,这和用普通的函数实现相比就减少了很多的冗余代码,增加了代码的复用性。将函数的返回值类型和形参列表的参数的类型抽象为泛型,所谓的泛型是一个不确定的类型,他就像一个类型变量一样,我们在调用函数的时候赋予泛型什么类型,他就表现出这个类型的性质。p就是一个数组指针,它指向的是数组,它解引用后得到的是数组首元素的地址,数组的类型是。...原创 2022-08-28 22:04:54 · 198 阅读 · 0 评论 -
c++征途 --- 项目 --- 职工管理系统
如果是第二次读取的话,读取的开头是从作为第一次读取结尾的空格往后数的第一个可读取数据,如果这个数据是能够被接收数据的变量接收的数据的话(类型匹配)则读取,在遇到空格或者是不可读取的内容的时候结束,如果不是的话直接读取结束,并返回一个0给接收数据的数字类型变量。1.答案就是多态 --- 我们在使用多态的时候会用父类指针来指向不同的子类,此时我们就统一了数组中的类型 --- 创建一个父类指针数组,数组中的元素是一个个指向不同子类的父类指针,这样子我们就能够统一管理不同的子类了。...原创 2022-08-14 23:36:39 · 244 阅读 · 0 评论 -
c++征途 --- 文件操作
1.以二进制的方式存储就是以0101的形式存储。原创 2022-08-13 13:41:07 · 202 阅读 · 0 评论 -
c++征途 --- 类和对象 --- 多态
1.先编译代码,然后再运行代码2.父类的引用可以指向子类!原创 2022-08-12 12:30:50 · 381 阅读 · 0 评论 -
c++征途 ---- 类与对象 --- 继承
1.下级别的类即具有上级别类的所有性质同时也具有自己的特性2.那么在定义这些下级别的类的时候我们就可以用上继承技术,减少重复的代码上图是类与类之间的继承方法进行了继承之后,A类的花括号的内容都会被自动放入B类的花括号中。...原创 2022-08-09 21:50:24 · 360 阅读 · 0 评论 -
c++征途 --- 类和对象 --- 运算符重载
对运算符进行重定义,使其适应不同的数据类型。原创 2022-08-07 21:59:59 · 416 阅读 · 0 评论 -
c++征途 --- 类和对象 --- 友元
2.方便使用的声明部分 --- 函数的声明部分就是将函数实现的花括号部分内容去掉,然后在创建函数部分的后面加上表示代码结束的;通过将类外的函数或类变为我们要访问的对象的友元(good friend)的方式,使得它们能够去访问这个对象中具有私有权限的成员属性了。让成员函数作为类的友元也需要将成员函数的声明写在对应类的括号里的最上方,然后再用 friend 关键字修饰这个函数声明,在一个类A的括号内的最顶端加上类B的声明,并用friend修饰这个函数声明,我们就可以使得类B成为类A的友元。......原创 2022-08-05 16:36:31 · 255 阅读 · 0 评论 -
c++征途 --- 类和对象 --- 对象特性(下)
当有对象调用成员函数的时候,成员函数中的this指针就会指向对象,而这个this指针是可以作为函数返回值的(其解引用也一样),当我们返回this指针的解引用的时候 --- 由于指针指向的是调用函数的对象,所以此时我们返回的就是调用这个函数的对象。这行代码就会出错,因为这行代码是通过this指针加箭头操作符的方式来访问指针指向的对象内的对应的成员函数,当指针连指向的对象都没有的时候又怎么能够找到对象内的成员变量呢?(不为空则this指针指向了一个对象,不违反前提,可以正常用this指针访问对象的成员变量;..原创 2022-08-03 20:08:02 · 202 阅读 · 0 评论 -
c++征途 --- 类和对象 --- 对象特性(中)
注意把类外初始化改为类外定义3.用static修饰的成员变量就是静态成员变量上面这张图显示的就是静态成员变量的类内声明和类外定义类内声明就没什么好说的,最重要的是类外定义如果我们没有进行类外初始化的话,会出现的结果就是我们在通过对象加点操作符的方式去访问这个静态成员变量时会访问失败,并导致程序出错出错的原因是静态成员变量在类中只是进行了变量声明,而变量声明是不会给变量分配内存的,所以我们需要在类外为静态成员变量进行变量定义,使其获得内存来存储数据,这样子我们才能够正常的访问静态成员变量静态成员。...原创 2022-08-02 14:42:02 · 172 阅读 · 0 评论 -
c++征程 --- 类和对象 --- 对象特性
当实参以值传递的方式传给函数形参的时候---形参是实参的一份临时拷贝,这份临时拷贝的实现代码就是---以上面那个为例---Personp(形参)=p(实参)---这个代码其实就是在用隐式转换法调用拷贝结构函数给形参对象初始化。所谓的拷贝构造其实就是将一个已经给成员属性赋值的对象作为参数传给构造函数()---采用引用传参的方式来接收参数----然后再在函数中通过别名+点操作符的方式将拷贝过来的对象的成员属性一一对应的赋值给类中的成员属性。...原创 2022-07-25 22:16:09 · 405 阅读 · 2 评论 -
c++征途 --- 类和对象:封装部分
1.每个对象都具有自己的性质,具有相同性质的对象抽象为类。原创 2022-07-22 23:16:19 · 271 阅读 · 0 评论 -
c++征途 --- 函数提高
1.有了占位参数之后,我们在调用函数的时候必须传一个和作为占位参数的数据类型相同类型的数据才行,如占位阐述是int,那我们在调用函数时就要传一个int(整型)型数据。这种可能出错的情况就是我们只传一个参a的时候,计算机如果选择第一个函数的话,我们传参a进去,然后b有默认参数(可传参,也可以不传参),函数的参数都起了,函数可被调用。这个就是没有符合函数重载条件的时候出现的函数名相同,这种情况是错误的,因为我们的计算机在调用func函数的时候无法选择调用哪一个fun函数,会导致程序出错。...原创 2022-07-21 09:50:56 · 195 阅读 · 0 评论 -
c++征途 --- 引用
1.引用的作用就是使得一个内存空间可以被多个代号表示,其中第一个给与的代号被我们称为原名,后面给予的代号都被称为别名---2.通过引用的方式来给予别名的语法如---此时a所代表的内存空间就拥有了别名b,a是内存空间的原名综上---通过别名和原名访问和操作的是同一个内存空间中的数据。...原创 2022-07-20 16:26:52 · 320 阅读 · 0 评论 -
c++征途 -- new操作符
1.将堆区中创建的内存空间释放的方法是用delete关键字来释放---格式是delete承接这个内存空间地址的指针变量,比如上面的这个deletep;2.用new在堆区创建完数组内存空间后(连续的内存空间),new还会将创建的连续的数组内存空间的首个内存空间的地址返回。newint[10]---中括号表示的是在堆区中创建的是数组,且这个数组中的元素个数为中括号里的值。newint(10)---小括号表示的是在堆区里创建的是变量,且这个变量存储的数据就是小括号里的值。...原创 2022-07-18 22:54:00 · 286 阅读 · 0 评论 -
c++征途 --- 程序的内存模型 -- 内存四区
1.代码区中存放的是二进制代码!!!而不是我们写的高级语言计算器会将我们写的高级语言转换为二进制数后再存入代码区1.存放CPU执行的机械指令---这个机械指令其实就是存放在代码区的二进制代码。...原创 2022-07-18 22:15:51 · 344 阅读 · 0 评论 -
c++征途 --- 通讯录管理系统
第二种由于数组名的本质就是数组首元素的地址,所以我们只需要建立一个对应类型的指针来接收这个地址就好,比如上面这个就是---(structHero*p,intlen)清空联系人的方法是逻辑清空,这里所谓的逻辑清空就是指将通讯录结构体中表示联系人数量的整型给置为0,这样的话无论调用哪一个功能,都只能在通讯录结构体中找到0个数据。1.把数组作为函数实参传给函数的时候,需要我们传数组名和数组长度这两个参数,如下图。然后我们加一个联系人的时候这个整型加1,然后我们将原有的旧数据修改为新加入的数据。...原创 2022-07-14 22:11:32 · 209 阅读 · 0 评论 -
c++征途 --- 结构体
1.结构体最重要的一点是自定义! 而结构体类型就是由我们自定义得到的类型1.自定义数据类型其实就是一些类型集合组成的一个新的类型 2.结构体自定义类型的写法 --- 结构体关键字 struct 类型标识符 { 成员列表 };3.创建结构体类型变量的方法:(结构体关键字 struct 类型标识符)括号里的内容就是相当于 int 的类型名,而创建变量的方法就是类型名 ---- 所以有创建结构体变量 -- struct strudent s1; 其中s1就是我们创建的结构体变量4.结构体变量的赋值操作:第一种:原创 2022-07-08 21:01:05 · 527 阅读 · 0 评论 -
c++征途 --- 指针
1.指针的作用就是用来记录地址编号的 1.c++中的指针创建和c中的指针创建一致,&符号的作用也一致2.使用指针的方法也一致 --- 使用解引用的方法来使用指针 --- *p 1.指针变量中存储的是地址,而无论什么数据的地址的大小都是一致的 ---- 所以无论什么类型的指针变量的大小都是一致的 --- 在32位机下,指针变量的大小是4个字节, 64位则是8个字节 --- 一个字节的大小是8个比特1.空指针指向的内存空间是不能够进行访问和操作的2.如何让指针指向空指针呢? --- 将 NULL 赋值给指针变原创 2022-06-25 15:17:43 · 527 阅读 · 0 评论 -
c++征途 --- 函数
1.return 后面跟的是返回值 --- 记得加上;1.函数调用之后会被函数自身的返回值给替代 2.调用函数时的参数是实参,函数定义中的参数是形参 ---- 形参是实参的的一份临时拷贝,修改形参不会影响实参 1.如果函数不需要返回值,那么函数的返回类型可以写作 void --- 同时由于返回值类型是void(即不需要返回值),所以return 后面什么都不用跟,直接一个分号;即可 --- ps:什么都不用返回时也要加 return 哦!2.如果要想函数中的操作影响到主函数中的变量的话,我们就必须传指针才可原创 2022-06-25 00:11:19 · 269 阅读 · 0 评论 -
c++征途 --- 数组
1.其中第一种定义方法没有将数组给初始化2.第二种定义方法有两种情况,一种是完全初始化,一种是不完全初始化完全初始化就是所有元素都被初始化了一定值不完全初始化则是只有部分元素被初始化了,此时没被初始化的元素会被默认初始化为03.第三种定义方法则是数组的长度(大小)由数组中的元素的个数和类型决定 0,1,2,3,4这些框框(下标引用操作符)里的数字都被称为下标 1.在c++中,当 sizeof 的括号里单独出现数组名时, sizeof计算的类型大小依然是整个数组的大小sizeof ( arr[ 0 ]原创 2022-06-24 21:08:24 · 591 阅读 · 0 评论 -
c++征途 -- 程序流程结构
1.三种结构:顺序,选择和循环顺序结构不言自明,所以我们直接从选择结构开始一。if 语句 1.简单来说就是如果满足条件就执行一行代码1.跟c语言里的没有区别2.if条件的后面不要加分号即这个语句的结尾和最后一个大括号后面都不要加分号 1.多了一个else if 选项2.如果if中的条件没有满足则看第一个else if 中的条件有没有满足,不然的话看第二个,第三个...如果都不满足的话就执行else下的语句3.补充一个特殊的if语句 --- 嵌套if语句所谓嵌套if语句就是在if语句中使用if语句4.补充原创 2022-06-24 11:30:14 · 242 阅读 · 0 评论 -
c++征途 --- 运算符
值得注意的是比较运算符和逻辑运算符都会在执行完功能之后返回一个真值/假值1.加号和减号既可以作双目运算符(加减乘除时),也可以作正负号(单目运算符)2.取模(取余)是双目运算符,其左右两个操作数必须是整型,返回值也是整型 1. 除法那里如果是两个整型相除的话,除法运算符的返回值也会是整型,且是实际除出来的值向下取整得到的结果,如理论结果为3.33则实际结果为32.若想在除法中获得小数结果的话,除法的左右两个操作数中必须有一个是浮点型3.两个数字相除,在分母上的除数不可以为0,如果是0的话就是非法操作,会报错原创 2022-06-19 23:29:09 · 351 阅读 · 0 评论 -
c++征途【1】变量,常量与数据类型
1.变量变量的作用:给一段内存空间命名意义:方便我们管理内存空间创建语法:数据类型 变量名 = 变量初始化值 ;2.变量补c语言中的输出方式:count <<我们想要输出的内容,字符串,存放在变量中的数据(用变量名表示等等)<<每两个箭头之间只能输出一个内容<<最后一个内容输出完后用endl作为结束<<endl3.常量作用:用于记录程序中不可更改的数据定义常量常用的两种方式:在c++中 const 修饰的变量既无原创 2022-06-19 22:46:42 · 351 阅读 · 0 评论