【寒假day4】leetcode刷题

news2024/12/23 3:14:20

🌈一、选择题

1.下列哪一个是析构函数的特征( )。

A: 析构函数定义只能在类体内    B: 一个类中只能定义一个析构函数
C: 析构函数名与类名相同       D: 析构函数可以有一个或多个参数
答案:B

答案解析:析构函数是构造函数的逆函数,它的功能是用来释放一个对象,它也是一种特殊

的构造函数。它具有如下特点:

  1. 函数名同类名,并前边加修饰符~。

  1. 定义该函数时不加返回类型。

  1. 该函数无参数。

  1. 该函数通常是系统在释放所创建对象时自动调用的。

  1. 一个类中只能有一个析构函数。

  1. 析构函数既能在类内定义,也能在类外定义。


2.如果有一个类是 myClass , 关于下面代码正确描述的是( )。

myClass::~myClass(){
delete this;
this = NULL;
}
A: 正确,我们避免了内存泄漏      B: 它会导致栈溢出
C: 无法编译通过                D: 这是不正确的,它没有释放任何成员变量
答案:C

答案解析:

  • 析构函数的作用:当对象生命周期结束后,收回对象占用的资源。

  • delete 的作用:用于收回new分配的内存空间。

  1. 再来看delete this这句代码: 在析构函数中delete this时,代码是可以通过编译的。但是,如果代码中具体创建了这个类的对象时,代码会在运行中崩溃。 delete实现是通过调用析构函数完成的,也就是会形成死循环造成栈溢出,并且delete清除的是堆上(new开辟的)的对象,但是不是所有的对象都是堆上开辟的在没有new的前提下对资源进行delete,就会导致运行崩溃。 但是这个还不是最关键的。

  1. 在析构函数中,this = NULL;

  1. 这一句会直接导致编译失败,因为 this指针的类型为 类类型 * const 。this指针本身的值是无法修改的。


3.设已经有 A,B,C,D 4个类的定义,程序中 A,B,C,D 析构函数调用顺序为()

C c;
void main()
{
A*pa=new A();
B b;
static D d;
delete pa;
}
A: A B C D     B: A B D C
C: A C D B     D: A C B D
答案:B

答案解析

  • 对于类A,是建立在堆上的对象指针pa,手动释放

  • 对于类B,是建立在栈上的对象 , main函数结束就释放

  • 对类C在静态存储区创建了一个对象c程序结束时候释放

  • 对类D也是在静态存储区建立对象d但是局部变量程序结束时候释放析构函数调用顺序。

首先手动释放pa, 所以会先调用A的析构函数,其次是C,B, D,编译器先构造的是全局对象C,然后是静态局部对象D,最后是普通对象B,所以三者的析构顺序完全相反,B->D->C,综上来说就是A->B->D->C。答案是B。


4.假定有类 AB ,有相应的构造函数定义,能正确执行()

AB a(4),b(5),c[3],*p[2]={&a,&b};
语句,请问执行完此语句后共调用该类的构造函数次数为( )。
A: 5    B: 4
C: 3    D: 9
答案:A

答案解析:

只有给对象分配内存才调用构造函数 AB a(4) 定义对象a, 调用了带一个参数的构造

AB b(5)跟上面的性质类似, 调用了带一个参数的构造

AB c[3] 跟上面的性质类似, 定义对象数组,调用无参构造3次

AB *p这至是一个指针,没有指向任何空间,更么有分配内存,不会调构造


5.下面有关类的静态成员和非静态成员,说法错误的是( )。

A: 静态成员变量存在与数据段,非静态成员需要实例化才会分配内存
B: 非静态成员函数中可以直接访问类中静态的成员
C: 静态成员函数中能访问非静态的成员
D: 非静态成员的生存期决定于该类对象的生存期,而静态成员生存期则与程序生命期相同
答案:C

答案解析:

静态成员变量:
1、所有对象共享同一份数据;
2、在编译阶段分配内存;
3、类内声明,类外初始化。
静态成员函数:
1、所有对象共享同一个函数;
2、静态成员函数只能访问静态成员变量。

A选项:静态成员存在于内存,非静态成员需要实例化才能分配内存。

B选项:静态成员属于类,非静态成员属于对象,对象必须实例化才存在,而类一直在,所以不可以用静态成员函数访问非静态成员,因为非静态可能不存在。因为静态成员存在于内存,所以非静态成员函数可以访问静态成员。所以B正确,C错误。

D选项:D选项不严谨,非静态成员函数的生存期决定于对象的生存期,不是类,静态成员的生存期取决于进程的生存期。




🌈二、编程题

🍄第1题:字符串压缩

思路分析:
这个题如果一个一个遍历,然后再数出每一个字符的个数,然后拼接成新字符,最后再和原字符比较的话,一点都不简单,而且特别繁琐。
这里的话可以考虑一下双指针解答:一个记录字母,一个记录字母的个数,简单明了,然后再利用一下to_string函数将数字转化为字符串,接下来一比较就完成了。
string compressString(string S) {
    int N = S.length();
    string res;  //拼接已经记录好的字符
    int i = 0;
    while (i < N) { 
        int j = i;  //双指针i,j
        while (j < N && S[j] == S[i]) {
            j++;
        }
        res += S[i];   //先记录字符
        res += to_string(j - i);    //在把字符的个数的数字转化为字符
        i = j;        //再继续记录下一个字符
    }

    if (res.length() < S.length()) {
        return res;
    } else {
        return S;
    }
}

这个题的关键不是用不用to_string函数,而是双指针。难并不是看不懂那种,对于各位小伙伴来说都是小趴菜。这就不过多的说了。

今天就更新一道编程题了,开学了,休息一下!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/340165.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

练 习

1.判断三个中最重的//依次输入相应的人的体重double people1, people2, people3;cout << "请输入第一个人体重" << endl;cin >> people1;cout << "请输入第二个人体重" << endl;cin >> people2;cout << "请…

开发人员与测试人员关系的理解

在软件开发中都会有开发人员&#xff08;以下简称开发&#xff09;和测试人员&#xff08;以下简称测试&#xff09;&#xff0c;在一些小型公司可能并没有测试&#xff0c;仅仅是开发兼任测试。在这里我仅针对于有专业的测试和专业的开发的项目。 每个公司应该都有考核机制&am…

solidwork中添加GB型材库以及使用

在使用solidwork设计遮光罩的时候&#xff0c;需要铝型材作为支架&#xff0c;铝型材如果自己去画设计可能浪费时间不说&#xff0c;还得去找对应型号。默认solidwork中没有国标的型材库。网上教程导入型材库路径是错误的&#xff0c;所以在复制完后打开solidwork找不见型材库 …

Ubuntu小操作

安装拼音输入法 sudo apt-get install ibus-pinyin点击加号 点击other 输入 chinese 使用 winspace 切换 可以在键盘快捷键处改变快捷键 安装ADB sudo apt-get install android-tools-adb编写规则 sudo gedit /etc/udev/rules.d/80-android.rules写入(其中红色字体部…

面试实战篇 | 快手本地生活,结合项目谈Redis实战项目场景?MySQL InnoDB存储引擎如何工作的?策略模式?

本期是【你好&#xff0c;面试官】系列文章的第21期&#xff0c;持续更新中…。 《你好&#xff0c;面试官》系列目前已经连载20篇了&#xff0c;据说看了这个系列的朋友都拿到了大厂offer~ 你好&#xff0c;面试官 | 你真的理解面向 “对象”&#xff1f;你好&#xff0c;面…

在Flask中构建API接口的相关概念

重定向行为斜杠以下两个路由的不同之处在于是否使用尾部的斜杠。第一个路由的URL尾部有一个斜杠&#xff0c;看起来就像一个文件夹&#xff0c;访问一个没有斜杠结尾的URL时&#xff0c;Flask会自动进行重定向&#xff0c;在结尾加上一个斜杠。第二个路由的URL没有尾部斜杠&…

ChatGpt-2 对话单页功能实现vue3+elementplus

接口可参照CHATGPT.NET自行实现 <script setup> import { RouterLink, RouterView } from "vue-router"; import HelloWorld from "./components/HelloWorld.vue"; import { MoreFilled ,CircleCheck} from "element-plus/icons-vue"; …

GIS数据格式坐标转换(地球坐标WGS84、GCJ-02、火星坐标、百度坐标BD-09、国家大地坐标系CGCS2000)

文章目录前言一、坐标系1.地球坐标 (WGS84)2.国测局坐标系(GCJ-02、火星坐标系)3.百度坐标(BD-09)4.国家大地2000坐标系(CGCS2000)二、百度坐标系(BD-09) 与火星坐标系(GCJ-02)的转换1.核心代码2.转换验证百度地图高德地图腾讯地图三、火星坐标系 (GCJ-02) 与百度坐标系 (BD-09…

【青训营】RPC框架分层设计简述

远程函数调用&#xff0c;Remote Procedute Calls&#xff0c;简称RPC。RPC需要解决的问题有&#xff1a;完成远程函数的映射&#xff0c;并且将数据转化为字节流&#xff0c;使用网络进行传输 RPC基本概念 IDL文件&#xff1a;IDL通过一种中立的方式来描述接口&#xff0c;使…

OpenCV 图像梯度算子

本文是OpenCV图像视觉入门之路的第12篇文章&#xff0c;本文详细的介绍了图像梯度算子的各种操作&#xff0c;例如&#xff1a;Sobel算子Scharr算子laplacian算子等操作。 OpenCV 图像梯度算子目录 1 Sobel算子 2 Scharr算子 3 laplacian算子 1 Sobel算子 Sobel算子是一种图…

.Net Core对于`RabbitMQ`封装分布式事件总线

首先我们需要了解到分布式事件总线是什么&#xff1b;分布式事件总线是一种在分布式系统中提供事件通知、订阅和发布机制的技术。它允许多个组件或微服务之间的协作和通信&#xff0c;而无需直接耦合或了解彼此的实现细节。通过事件总线&#xff0c;组件或微服务可以通过发布或…

基于STM32的虚拟示波器

仓库地址 https://github.com/shuai132/ScopeMCU ScopeMCU Oscilloscope for MCU MCU: STM32F103C8Tx 需配合ScopeGUI使用 截图说明见wiki 最新版Releases Introduction 用最少的硬件成本&#xff0c;做一个实用的虚拟示波器。 这是硬件部分&#xff0c;基于STM32最小…

提取DataFrame中每一行的DataFrame.itertuples()方法

【小白从小学Python、C、Java】【计算机等级考试500强双证书】【Python-数据分析】提取DataFrame中的每一行DataFrame.itertuples()选择题关于以下python代码说法错误的一项是?import pandas as pddf pd.DataFrame({A:[a1,a2],B:[b1,b2]},index[i1,i2])print("【显示】d…

基于SpringBoot实现ChatGPT-QQ机器人

概述 近期ChatGPT火爆全球&#xff0c;在其官方网站上也列举了非常全面的应用案例&#xff0c;仅仅上线两个月活跃用户数已经达到1亿&#xff0c;成为历史上用户数增长最快的面向消费者的应用 快速体验 OpenAI官网对外提供了标准的 API 接口&#xff0c;可以通过HTTP请求进行…

SignalR注册成Windows后台服务,并实现web前端断线重连

注意下文里面的 SignalR 不是 Core 版本&#xff0c;而是 Framework 下的 本文使用的方式是把 SignalR 写在控制台项目里&#xff0c;再用 Topshelf 注册成 Windows 服务 这样做有两点好处 传统 Window 服务项目调试时需要“附加到进程”&#xff0c;开发体验比较差&#xf…

RibbitMQ 入门到应用 ( 二 ) 安装

3.安装基本操作 3.1.下载安装 3.1.1.官网 下载地址 https://rabbitmq.com/download.html 与Erlang语言对应版本 https://rabbitmq.com/which-erlang.html 3.1.2.安装 Erlang 在确定了RabbitMQ版本号后&#xff0c;先下载安装Erlang环境 Erlang下载链接 https://packa…

vue通用后台管理系统

用到的js库 遇到的问题 vuex和 localStorage区别 vuex在内存中&#xff0c;localStorage存在本地localStorage只能存储字符串类型数据&#xff0c;存储对象需要JSON.stringify() 和 parse()…读取内存比读取硬盘速度要快刷新页面vuex数据丢失&#xff0c;localStorage不会vuex…

图的基本介绍和表示方式

图的基本介绍 为什么要有图这个基本数据结构? 我们还学习过线性表&#xff08;数组、队列、链表和栈&#xff09;和树&#xff0c;但是我们可以发现&#xff0c;线性表局限于一个直接前驱&#xff08;就是只能有唯一一个前面的结点&#xff09;和一个直接后继的&#xff08;…

Python+dilb 简单实现人脸检测(附代码)

如果dilb和face_recognition第三方包安装失败&#xff0c;请移步到Python 解决dilb和face_recognition第三方包安装失败_水w的博客-CSDN博客 目录 一、环境配置 二、前期知识 1 读取图片 2 灰度转换 解决报错cv2.error: OpenCV(4.7.0) D:\a\opencv-python\opencv-python\o…

【前端vue2面试题】2023前端最新版vue模块,高频17问(上)

&#x1f973;博 主&#xff1a;初映CY的前说(前端领域) &#x1f31e;个人信条&#xff1a;想要变成得到&#xff0c;中间还有做到&#xff01; &#x1f918;本文核心&#xff1a;博主收集的关于vue2面试题(上) 目录 vue2面试题 1、$route 和 $router的区别 2、一个…