C++
文章平均质量分 58
『魔法猫咪』
魔法猫咪冲鸭~
展开
-
C++:字符串哈希
给定一个长度为n的字符串,再给定m个询问,每个询问包含四个整数l1r1l2r2,请你判断l1r1和l2r2这两个区间所包含的字符串子串是否完全相同。字符串中只包含大小写英文字母和数字。原创 2023-08-18 20:05:08 · 378 阅读 · 0 评论 -
C++:哈希表——模拟散列表
维护一个集合,支持如下几种操作:1.“I x”,插入一个数x2.“Q x”,询问数x是否在集合中出现过现在要进行N次操作,对于每个询问操作输出对应的结果。原创 2023-08-15 18:23:45 · 344 阅读 · 0 评论 -
C++:模拟堆
维护一个集合,初始集合为空,支持如下几种操作:1.“I x”,插入一个数x2.“PM” ,输出当前集合中的最小值3.“DM”,删除当前集合中的最小值(当最小值不唯一时,删除最早插入的最小值)4.“D k”,删除第k个插入的数5.“C k x”,修改第k个插入的数,将其变为x现在要进行N次操作,对于所有的第2个操作,输出当前集合的最小值。原创 2023-08-12 20:55:16 · 297 阅读 · 0 评论 -
C++:Trie字符串统计
维护一个字符串集合,支持两种操作:1."I x"向集合中插入一个字符串x2."Q x"询问一个字符串在集合中出现了多少次共有N个操作,输入的字符串总长度不超过105,字符串仅包含小写英文字母。原创 2023-08-12 11:03:13 · 202 阅读 · 0 评论 -
C++:堆排序
输入一个长度为n的整数数列,从小到大输出前m小的数。原创 2023-08-10 17:25:34 · 198 阅读 · 0 评论 -
C++:N皇后
N皇后#include<iostream>#include<vector>using namespace std;class Solution{public: vector< vector<string> > result; void backTrack(int n, int row, vector<string>& chessboard) { if(row == n) {原创 2023-08-09 17:21:23 · 281 阅读 · 0 评论 -
C++:旋转矩阵
法一:直接转180°。原创 2023-08-09 17:19:46 · 628 阅读 · 0 评论 -
C++:子串计算
给出一个01字符串(长度不超过100),求其每一个子串出现的次数。原创 2023-08-09 17:18:40 · 667 阅读 · 0 评论 -
C++:连通块中点的数量
给定一个包含n个点(编号为1~n)的无向图,初始时图中没有边现在要进行m个操作,操作共有3种1."C a b"在点a和点b之间连一条边,a和b可能相等2."Q1 a b"询问点a和点b是否在同一个连通块中,a和b可能相等3."Q2 a"询问点a所在连通块中点的数量。原创 2023-08-09 17:11:46 · 204 阅读 · 0 评论 -
C++:合并集合(并查集)
一共有n个数,编号是1~n,最开始每个数各自在一个集合中。现在要进行m个操作,操作共有2种:1.“M a b”,将编号为a和b的两个数的所在的集合合并,如果两个数已经在同一个集合中则忽略这个操作2.“Q a b”,询问编号为a和b的两个数是否在同一个集合中。原创 2023-08-08 21:02:25 · 551 阅读 · 0 评论 -
C++: kmp算法
给定一个模式串S以及一个模板串P,所有字符串中只包含大小写英文字母以及阿拉伯数字。模板串P在模式串S中多次作为子串出现。求出模板串P在模式串S中所有出现的位置的起始下标。原创 2023-08-06 20:38:46 · 192 阅读 · 0 评论 -
C++:初始化列表和派生类构造函数中的基类参数表
初始化列表和派生类构造函数中的基类参数表引例 在图形这个抽象类上派生出矩形类和圆形类,两者都有计算对象周长的函数,并编写测试main()函数使用初始化列表#include<iostream>using namespace std;class Shape{public: Shape() {} ~Shape() {} //获取对象周长 virtual double GetPerim() = 0;}; class Rectangle:public Shape{p原创 2021-06-21 12:28:17 · 1832 阅读 · 0 评论 -
C++:this指针的使用
类中this指针的使用本关任务:1.编写函数初初化数组,即给数组申请内存空间.分配内存空间size个大小为DATATYPE的单元数,元素个数初始化为0当size超过MAX_SIZE时,空间设为MAX_SIZE个单元@param size:int ,空间大小@Return void2.在数组的尾部插入元素e并打印数组各元素TestCase3The space of array is:10The elements of array is:3[0,1,4]8The space of a原创 2021-04-09 17:30:38 · 72 阅读 · 0 评论 -
C++:值传递和引用传递
值传递和引用传递引用:变量数据类型语法:&引用名 = 已声明的变量名用引用作为函数参数的实现引用传递函数参数传递:值传递(单向值拷贝,只能将实参的值拷贝给形参, 实参与形参各自独占内存)引用传递 :实现的是引用传递(形参与实参共用内存), 实参与形参是同一个对象值传递用于读操作引用传递用于写操作引用类型:指针, 数组, 引用类型指针版本交换2个变量的值@param pa, int*, 指针@param pb, int*, 指针void swap(int* pa,int*原创 2021-03-14 16:51:51 · 2195 阅读 · 2 评论 -
C++:单列表结点类基础应用
单链表结点类的基础应用#include <iostream>#include <string>using namespace std;//单链表结点类:class Node{ public://成员函数 //this:类型为对象指针,指向当前对象 void show(){ cout << this->data; cout<<"," << this->next; cout << endl; }原创 2021-03-14 11:06:34 · 226 阅读 · 0 评论 -
C++:顺序容器
顺序容器向量(vector)双端队列(deque)列表(list)单向链表(forward_list) (以上四种在逻辑上可看作是一个长度可扩展的数组)数组(array)元素线性排列,可以随时在指定位置插入元素和删除元素。必须符合Assignable这一概念(即具有公有的拷贝构造函数并可以用“=”赋值)。array对象的大小固定,forward_list有特殊的添加和删除操作。顺序容器的接口(不包含单向链表(forward_list)和数组(array)原创 2021-02-16 12:08:11 · 308 阅读 · 0 评论 -
C++:容器的基本功能与分类
容器的基本功能与分类容器类是容纳、包含一组元素或元素集合的对象。基于容器中元素的组织方式:顺序容器、关联容器按照与容器所关联的迭代器类型划分:可逆容器和随机访问容器容器的基本功能与分类容器unorderedset (无序集合)、unorderedmultiset(无序多重集合)unorderedmap(无序映射)、unordermultimap(无序多重映射)set(集合)、multiset(多重集合)、map(映射)、multimap(多重映射)arr原创 2021-02-16 11:24:27 · 635 阅读 · 1 评论 -
C++:迭代器
迭代器迭代器是算法和容器的桥梁迭代器用作访问容器中的元素算法不直接操作容器中的数据,而是通过迭代器间接操作算法和容器独立增加新的算法,无需影响容器的实现增加新的容器,原有的算法也能适用输入流迭代器和输出流迭代器输入流迭代器以输入流(如cin)为参数构造可用*(p++)获得下一个输入的元素istream_iterator<T>输出流迭代器构造时需要提供输出流(如cout)可用(*p++) = x将x输出到原创 2021-02-16 11:14:11 · 152 阅读 · 1 评论 -
C++:函数模板与类模板
函数模板思考:如果重载的函数,其解决问题的逻辑是一致的、函数体语句相同,只是处理的数据类型不同,那么写多个相同的函数体,是重复劳动,而且还可能因为代码的冗余造成不一致性。解决:使用模板求绝对值函数的模板函数模板定义语法语法形式:template <模板参数表>函数定义模板参数表的内容类型参数:class(或typename) 标识符常量参数:类型说明符 标识符模板参数:template <参数表> class标识符原创 2021-01-23 10:54:09 · 398 阅读 · 0 评论 -
C++11:OVERRIDE 与 FINAL
override多态行为的基础:基类声明虚函数,继承类声明一个函数覆盖该虚函数覆盖要求: 函数签名(signatture)完全一致函数签名包括:函数名 参数列表 const下列程序就仅仅因为疏忽漏写了const,导致多态行为没有如期进行显式函数覆盖C++11 引入显式函数覆盖,在编译期而非运行期捕获此类错误。在虚函数显式重载中运用,编译器会检查基类是否存在一虚拟函数,与派生类中带有声明override的虚拟函数,有相同的函数签名(signature);若不存在,则会回报错误原创 2021-01-23 09:52:04 · 135 阅读 · 0 评论 -
C++:抽象类
抽象类纯虚函数纯虚函数是一个在基类中声明的虚函数,它在该基类中没有定义具体的操作内容,要求各派生类根据实际需要定义自己的版本,纯虚函数的声明格式为:virtual 函数类型 函数名(参数表) = 0;(等于0表示没有函数体)抽象类带有纯虚函数的类称为抽象类:class 类名 { virtual 类型 函数名(参数表)=0; //其他成员…… }抽象类作用抽象类为抽象和设计的目的而声明将有关的数据和行为组织在一个继承层次结构中,保证派生类具有要求的行为。对于暂时无法原创 2021-01-23 09:39:15 · 901 阅读 · 0 评论 -
C++:虚函数
初识虚函数用virtual关键字说明的函数虚函数是实现运行时多态性基础C++中的虚函数是动态绑定的函数虚函数必须是非静态的成员函数,虚函数经过派生之后,就可以实现运行过程中的多态。一般成员函数可以是虚函数构造函数不能是虚函数析构函数可以是虚函数一般虚函数成员虚函数的声明virtual 函数类型 函数名(形参表);虚函数声明只能出现在类定义中的函数原型声明中,而不能在成员函数实现的时候。在派生类中可以对基类中的成员函数进行覆盖。虚函原创 2021-01-22 21:59:11 · 133 阅读 · 0 评论 -
C++:运算符重载
运算符重载运算符重载规则思考:用“+”、“-”能够实现复数的加减运算吗?实现复数加减运算的方法 ——重载“+”、“-”运算符运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据时导致不同的行为。C++ 几乎可以重载全部的运算符,而且只能够重载C++中已经有的。不能重载的运算符:“.”、“.*”、“::”、“?:”重载之后运算符的优先级和结合性都不会改变。运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造。例如:使复数类的对原创 2021-01-22 21:13:40 · 215 阅读 · 0 评论 -
C++:类的继承例题
类的继承#include "stdafx.h"#include <iostream>using namespace std;class Animal { //int age;如果不加pulic:那么系统会自动默认为privatepublic: int age;};class Dog : Animal {public: void SetAge(int n) {age = n;}};int main(){ Dog d; d.SetAge(2); return原创 2021-01-22 19:10:33 · 719 阅读 · 0 评论 -
C++:虚基类
虚基类需要解决的问题当派生类从多个基类派生,而这些基类又共同基类,则在访问此共同基类中的成员时,将产生冗余,并有可能因冗余带来不一致性虚基类声明以virtual说明基类继承方式例:class B1:virtual public B作用主要用来解决多继承时可能发生的对同一基类继承多次而产生的二义性问题为最远的派生类提供唯一的基类成员,而不重复产生多次复制注意:在第一级继承时就要将共同基类设计为虚基类。虚基类举例#include &l原创 2021-01-22 15:07:09 · 557 阅读 · 0 评论 -
C++:访问从基类继承的成员
访问从基类继承的成员作用域限定当派生类与基类中有相同成员时:若未特别限定,则通过派生类对象使用的是派生类中的同名成员。如要通过派生类对象访问基类中被隐藏的同名成员,应使用基类名和作用域操作符(::)来限定。多继承同名隐藏举例#include <iostream>using namespace std;class Base1 { public: int var; void fun() { cout << "Member of Base1原创 2021-01-22 14:53:05 · 313 阅读 · 0 评论 -
C++:派生类构造函数
派生类构造函数默认情况基类的构造函数不被继承;派生类需要定义自己的构造函数。C++11规定using B::B;派生类新增成员可以通过类内初始值进行初始化。可用using语句继承基类构造函数。但是只能初始化从基类继承的成员。语法形式:建议如果派生类有自己新增的成员,且需要通过构造函数初始化,则派生类要自定义构造函数。若不继承基类的构造函数派生类新增成员:派生类定义构造函数初始化;继承来的成员:自动调用基类构造函数进行初始化;派生类的原创 2021-01-21 21:17:50 · 2106 阅读 · 0 评论 -
C++:基于范围的for循环举例
基于范围的for循环举例普通循环#include<iostream>using namespace std;int main(){ int array[3] = {1,2,3}; int *p; for(p = array; p < array + sizeof(array) / sizeof(int); ++p) { *p += 2; cout << *p << endl; } return 0;}基于范围的for循环(C++1原创 2021-01-19 11:20:21 · 91 阅读 · 0 评论 -
C++:对象数组
对象数组对象数组的定义与访问定义对象数组类名 数组名[元素个数]访问对象数组元素通过下标访问数组名[下标].成员名对象数组初始化数组中每一个元素对象被创建时,系统都会调用类构造函数初始化该对象通过初始化列表赋值例:Point a[2]={Point(1,2),Point(3,4)}如果没有为数组元素指定显式初始值,数组元素便使用默认值初始化(调用默认构造函数)数组元素所属类的构造函数元素所属的类不声明构造函数,则采用默认构造函数。各元素对象的初值要求为相同的值时,原创 2021-01-19 10:39:46 · 215 阅读 · 0 评论 -
C++:私有继承和保护继承
私有继承和保护继承私有继承(private)继承的访问控制基类的public和protected成员:都以private身份出现在派生类中基类的private成员:不可直接访问访问权限派生类中的成员函数:可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员通过派生类的对象:不能直接访问从基类继承的任何成员私有继承举例Point.h#ifndef _POINT_H#define _POINT_Hclass Point {原创 2021-01-18 22:55:53 · 162 阅读 · 0 评论 -
C++:类的友元
类的友元友元是C++提供的一种破坏数据封装和数据隐藏的机制。通过将一个模块声明为另一个模块的友元,一个模块能够引用到另一个模块中本是被隐藏的信息。可以使用友元函数和友元类。为了确保数据的完整性,及数据封装与隐藏的原则,建议尽量不使用或少使用友元。友元函数友元函数是在类声明中由关键字friend修饰说明的非成员函数,在它的函数体中能够通过对象名访问 private 和 protected成员作用:增加灵活性,使程序员可以在封装和快速性方面做合理选择。访问对象中的成员必须通过对象名。使用友元函原创 2021-01-18 20:31:55 · 146 阅读 · 0 评论