【C++笔试强训】第十八天

news2024/12/23 18:44:05

🎇C++笔试强训


  • 博客主页:一起去看日落吗
  • 分享博主的C++刷题日常,大家一起学习
  • 博主的能力有限,出现错误希望大家不吝赐教
  • 分享给大家一句我很喜欢的话:夜色难免微凉,前方必有曙光 🌞。

在这里插入图片描述

💦🔥


选择题

💦第一题

以下关于STL的描述中,()是错的

A STL容器是线程不安全的
B 当容量不够时,STL的一个典型实现是vector内部内存扩展方式为翻倍
C std::sort是稳定排序
D std::bitset不是一个STL容器

这道题是关于STL的

STL容器都是线程不安全的,一旦放在多线程里面,需要用户自己加锁

当容量不够时,STL的一个典型实现是vector内部内存扩展方式为翻倍,有的版本是二倍,有些是1.5倍

std::sort是排序算法,底层是个插入排序和快排,快排的特点是不稳定

bitset是一个位集合,不是一个容器,并不是装类型,是装二进制位,容器可以装很多类型不同的集合

这道题的答案是C


💦第二题

以下STL的容器存放的数据,哪个肯定是排好序的()

A vector
B deque
C list
D map

map的底层是红黑树,是棵二叉排序树,是按中序遍历的,所以肯定是排序好的

这道题的答案是D


💦第三题

以下哪种STL容器中的对象是连续存储的()

A list
B vector
C map
D set

map 和 set 都是红黑树

只有向量vector是连续存储的

这道题的答案是B


💦第四题

STL中的哪种结构在增加成员时可能会引起原有成员的存储位置发生改变()

A map
B set
C list
D vector

可能会引起原有成员的存储位置发生改变,一般会发生在连续程序里面,插入需要扩容

这道题的答案是D


💦第五题

STL中的一级容器有:

A vector, deque, list, set, multiset, map, multimap.
B 序列容器,关联容器,容器适配器
C set, multiset, map, multimap.
D vector, deque, list.

这道题要了解一个问题,STL一般是通过维度来分的

请添加图片描述

vector, deque, list.都是基本类型,不牵扯组合类型

这道题的答案是D


💦第六题

STL中的unordered_map和priority_queue使用的底层数据结构分别是什么()

A rbtree,queue
B hashtable,heap
C rbtree,heap
D hashtable,queue

底层结构指的是适配器,STL有六大组件,空间适配器,容器,算法,迭代器,仿函数,适配器

适配器常见的是stack 和 queue ——> 通过deque实现的
priority_queue——> vector
map set ——> rbtree
unordered_map —— hash_map ——> hashtable
unordered_set —— hash_set

unordered_map实现的是哈希表,priority_queue默认实现一个大堆

这道题的答案是B


💦第七题

下面关于迭代器失效的描述哪个是错误的()

A vector的插入操作不会导致迭代器失效
B map的插入操作不会导致迭代器失效
C vector的删除操作只会导致指向被删除元素及后面的迭代器失效
D map的删除操作只会导致指向被删除元素的迭代器失效

vector的插入操作最有可能导致迭代器失效

一般是插入或者删除可能会导致迭代器失效,但每种容器具体情况可能不一样,需要具体分析,插入和删除需要扩容和挪动数组

map的插入操作不会导致迭代器失效,只需要修改新插入节点的指针

vector的删除操作只会导致指向被删除元素及后面的迭代器失效,删除后数据会往前移动

map的删除操作只会导致指向被删除元素的迭代器失效

这道题的答案是A


💦第八题

如何捕获异常可以使得代码通过编译?

class A {
public:
	A(){}
};
void foo(){
	throw new A;
}

A catch (A && x)
B catch (A * x)
C catch (A & x)
D 以上都是

  • throw:抛出异常信息,类似于执行返回语句,因为它将终止函数的执行,但是它不是将控制权交给调用程序,而是导致程序沿着函数调用序列后退,直到找到包含try块的函数.
  • catch:类似于函数定义,但并不是函数定义,关键字catch表明这是给一个处理程序, 里面的A *x 会接受throw传过来错误信息.

题目中问的是能否通过编译,只有B会捕获到异常,进行异常处理,而A和C由于和throw抛出的异常类型不匹配,导致这个异常不被捕获,从而成为未捕获的异常,调用terminate函数结束程序。

这道题的答案是B


💦第九题

有如下程序段:

#include <iostream>
using namespace std;
class A {
public:
	~A() {
		cout << "~A()";
	}
};
class B{
public:
	virtual ~B() {
		cout << "~B()";
	}
};
class C: public A, public B {
public:
	~C() {
		cout << "~C()";
	}
};
int main() {
	C * c = new C;
	B * b1 = dynamic_cast<B *>(c);
	A * a2 = dynamic_cast<A *>(b1);
	delete a2;
}

则程序输出:

A C()B()~A()
B C()A()~B()
C A)B)都有可能
D 以上都不对

这道题考的是动态转换

main()函数中,第一句只用了new,调用了构造函数,没用delete,不会调用析构函数,内存泄露。第二句、第三句只是定义了指向不同对象的指针,不会产生对象,所以构造函数、析构函数都没调用,最后一句delete调用析构函数,因为基类A的析构函数不是虚函数,所以只调用A的析构函数,输出:~A(),如果A的析构函数加上virtual, 输出:~~C()~~B()~A(),与直接delete c输出一样。 析构函数声明为虚函数,这样析构时,先调用派生类的析构函数,再调用基类的析构函数,防止内存泄露。

这道题的答案是D


💦第十题

以下程序输出结果是____

class A
{
public:
	A ():m_iVal(0){test();}
	virtual void func() { std::cout<<m_iVal<<‘ ’;}
	void test(){func();}
	public:
	int m_iVal;
};
class B : public A
{
public:
	B(){test();}
	virtual void func()
	{
		++m_iVal;
		std::cout<<m_iVal<<‘ ’;
	}
};
int main(int argc ,char* argv[])
{
	A*p = new B;
	p->test();
	return 0;
}

A 1 0
B 0 1
C 0 1 2
D 2 1 0
E 不可预期
F 以上都不对

请添加图片描述

这道题的答案是C


编程题

🔥 第一题

链接:统计每个月兔子的总数

请添加图片描述

  • 解题思路

第n个月的兔子数量由两部分组成,一部分是上个月的兔子f(n-1),另一部是满足3个月大的兔子,会生一只兔
子f(n-2)。所以第n个月兔子总数: f(n) = f(n - 1) + f(n - 2)。本题是在变相考察斐波那契数列。

  • 代码演示
#include <iostream>
using namespace std;

//迭代法
// int Fib(int n)
// {
//     if(n <= 2)
//         return 1;
//     int f,f1 = 1,f2 = 1;
//     for(int i = 3 ;i <= n;++i)
//     {
//         f = f1 + f2;
//         f1 = f2;
//         f2 = f;
//     }
//     return f;
// }


//递归法,如果数据过大可能会栈溢出
int Fib(int n)
{
    if(n <= 2)
        return 1;
    return Fib(n-1)+Fib(n-2);
}

int main()
{
    int month;
    int sum = 0;
    while(cin >> month)
    {
        sum = Fib(month);
        cout << sum << endl; 
    }
    return 0;
}

🔥 第二题

链接:字符串通配符

请添加图片描述
请添加图片描述

  • 解题思路

本题可以通过递归求解。从前向后一次匹配,遇到相同字符,都向后移动一个字符,如果通配符遇到"?“,则
不需匹配,自动跳过一个字符,如果通配符遇到”*",则可以匹配任意多个字符,包括0个,此时可以有三种
选择,1,匹配0个,通配符向后移动一个字符,字符串不动。2,匹配1个,通配符和字符串都向后移动一个
字符。3,匹配多个,通配符不动,字符串向后移动一个字符。

递归的终止条件:通配符或者字符串遇到’\0’。当他们同时结束。

  • 代码演示
#include <iostream>
#include <string>
using namespace std;
bool match(const char* pattern, const char* str) {
    //当前字符结束,返回true
    if (*pattern == '\0' && *str == '\0')
        return true;
    //两个字符串有一个先结束,则返回false
    if (*pattern == '\0' || *str == '\0')
        return false;
    if (*pattern == '?') {
    //新增用例,题目强调?只能够匹配数字和字母,所以增加新的判断
        if (!isdigit(*str) && !isalpha(*str))
            return false;
    //遇到?号,匹配一个字符,跳过一个位置
        return match(pattern + 1, str + 1);
    } else if (*pattern == '*') {
    // 遇到*号,匹配0个(str不挪动),1个(两者都向前挪动一个字符)或多个(str向前挪动一个字符)
        while (*pattern == '*') {
            pattern++;
        }
        pattern--;
        if (!isdigit(*str) && !isalpha(*str))
            return match(pattern + 1, str);
        return match(pattern + 1, str) || match(pattern + 1, str + 1) ||
               match(pattern, str
                     + 1);
    } else if (tolower(*pattern) == tolower(*str)) {
     //忽略大小写
    //如果当前字符相等,匹配下一个字符
        return match(pattern + 1, str + 1);
    }
    return false;
}
int main() {
    string pattern, str;
    while (cin >> pattern >> str) {
        bool ret = match(pattern.c_str(), str.c_str());
        if (ret)
            cout << "true" << endl;
        else
            cout << "false" << endl;
    }
    return 0;
}

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

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

相关文章

Dubbo源码学习(八)ScopeBeanFactory对比Spring 的BeanFactory

目录 1. ScopeBeanFactory与BeanFactory对比 2. 注册Bean 3. 执行一系列的PostProccessor 1. ScopeBeanFactory与BeanFactory对比 ScopeBeanFactory是Dubbo自己定义的管理Bean的一个类, 类似于Spring BeanFactory注册管理Bean的方式&#xff0c; 不同的是Spring BeanFactor…

软考下午第5题——面向对象程序设计——代码填空(老程序员必得15分)

第五个题目分为C 和 Java两个题目&#xff0c;除去编写代码不同&#xff0c;考察的内容是完全相同的&#xff0c;选一个就行。建议Java&#xff0c;因为老程序员最近用的Java肯定对。 题目考察形式为给出类图描述和几乎全部代码&#xff0c;考生关键代码填空即可。 某软件公司…

【数据结构】简单认识:堆

数据结构&#xff1a;堆堆1.堆是什么&#xff1f;2.堆的特性。3.堆的操作原理①堆的插入原理②堆的删除原理堆 1.堆是什么&#xff1f; 堆是特殊的队列&#xff0c;不同于普通队列&#xff0c;从堆中取出元素是依照元素的优先级大小&#xff0c;而不是元素进入队列的先后顺序…

计算机毕业设计(附源码)python疫情防控管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

阿里/华为云服务器centos7.5 java部署环境快速搭建一条龙【git、maven、jdk8、docker安装nginx、mysql、redis】

文章目录linux常用命令汇总视频教程云服务器搭建java部署环境1.安装配置git2.安装jdk和maven下载安装3.安装docker4.安装docker-compose5.编排nginx6.编排mysql7.编排redislinux常用命令汇总 linux常用命令汇总 视频教程 云服务器java环境搭建一条龙&#xff08;1&#xff0…

数据分析 | Pandas 200道练习题,每日10道题,学完必成大神(6)

文章目录前期准备1. 使用绝对路径读取本地Excel数据2. 查看数据前三行3. 查看每一列数据缺失值情况4. 提取日期列含有空值的行5. 输出每列缺失值具体行的情况6. 删除所有缺失值的行7. 绘制收盘价的折线图8. 同时绘制开盘价与收盘价9. 绘制涨跌的直方图10. 让直方图给更细致本章…

MPEG vs JPEG

MPEG 是什么呢&#xff1f;看着很熟悉&#xff0c;于是想起了 FFmpeg。 于是不禁要问&#xff1a;二者有关系吗&#xff1f; FFmpeg 是一个完整的跨平台音视频解决方案&#xff0c;它可以用于处理音频和视频的转码、录制、流化处理等操作。其实是 FFmpeg 取名借鉴了 MPEG&…

UE4 回合游戏项目 02- 创建人物-敌人角色(动画蓝图练习)

在上一节&#xff08;UE4 回合游戏项目 01- 创建人物-玩家角色&#xff09;基础上创建敌人角色的动画蓝图 步骤&#xff1a; 1.创建动画蓝图 选择怪物骨骼 命名为enemy1_AnimBP 2.双击打开enemy1_AnimBP&#xff0c;创建一个新的状态机节点&#xff0c;连接到输出姿势 3.双击…

计算机毕业设计(51)java小程序毕设作品之教室图书馆座位预约小程序系统

项目背景和意义 目的&#xff1a;本课题主要目标是设计并能够实现一个基于微信小程序预约订座小程序&#xff0c;前台用户使用小程序&#xff0c;后台管理使用JavaMysql开发&#xff0c;后台使用了springboot框架&#xff1b;通过后台添加座位类型、座位号&#xff0c;用户通过…

JVM 的发展历程及其基本概念 (一)

一、JVM的基本介绍 1、随着Java7的正式发布&#xff0c;Java 虛拟机的设计者们通过JSR-292规范基本实现在Java虚拟机平台上运行非Java语言编写的程序。 Java虚拟机根本不关心运行在其内部的程序到底是使用何种编程语言编写的&#xff0c;它只关心“字节码”文件。也就是说Ja…

java线程简介

文章目录前言Java线程简介多线程的优点线程的优先级线程的状态daemon线程总结前言 很多地方我们都会用到线程&#xff0c;java操作系统的线程本质其实就是&#xff0c;你写了一个线程类&#xff0c;java替你一对一的在操作系统层面创建了一个线程。之前应该是这样的&#xff0…

【HTML】标签下合集~~~

&#x1f60a;博主页面&#xff1a;鱿年年 &#x1f449;博主推荐专栏&#xff1a;《WEB前端》&#x1f448; ​&#x1f493;博主格言&#xff1a;追风赶月莫停留&#xff0c;平芜尽处是春山❤️ 目录 一、图像标签和路径&#xff08;重点&#xff09; 1.图像标签 2.路径…

直播间数字化新趋势:打造内容良性循环

一年一度的「双十一」又来了&#xff0c;还记得去年的「双十一」热点吗&#xff1f; 去年「双十一」&#xff0c;李佳琦当天直播超过 12 小时&#xff0c;观看人数达到 2.49 亿人&#xff0c;再加上另一个顶流薇娅&#xff0c;二人当天总销售额高达 189 亿元。 这个数字&#x…

排序算法-冒泡排序(工具类)

冒泡排序 什么是冒泡排序 冒泡排序&#xff08;Bubble Sort&#xff09;&#xff0c;是计算机科学领域简单的排序算法 重复的访问每一个元素&#xff0c;依次相邻的两个元素进行比较大小&#xff0c;进行交换位置&#xff0c; 为什么叫冒泡排序&#xff1a; 越小的元素会经…

C - Bricks and Bags,E - Hanging Hearts,H-Leonard的子序列_树状数组优化dp,B - Hash 河南省赛

14天阅读挑战赛 C - Bricks and Bags 情况考虑少了&#xff0c;以为把最大值和最小值单独放在两个包里是最优的&#xff0c;其实不是&#xff0c;应该是分别枚举i&#xff0c;分别和最大值或最小值单独放在两个包里&#xff0c;然后去更新答案 #include<bits/stdc.h> …

基于stm32 ESP8266WiFi模块的基本通信

文章目录前言一、什么是ESP8266&#xff1f;二、ESP8266常用指令集三、模块的配置 及 指令的使用四、程序设计前言 本篇涉及到的模块与工具为&#xff1a; 1. ATK-ESP8266wifi模块 2. USB-UART模块 3. 串口调试助手 提取链接&#xff1a;https://pan.baidu.com/s/17xRlpnjp8j-…

软考下午题第2题——E-R图 UML图 逻辑结构设计-示题与解析

下午的第二题主要是找【属性】【主键】【外键】【候选键】之间的关系。 候选键&#xff1a;属性或者是属性组合&#xff0c;其值能够唯一地标识一个元组 主键&#xff1a;在一个关系中可能有多个候选键&#xff0c;从中选择一个作为主键 外键&#xff1a;如果一个关系中的属性或…

【JavaWeb】会话跟踪技术Cookie与Session原始真解

文章目录1 什么是会话&#xff1f;2 Cookie技术2.1 Cookie简介2.2 Cookie的理解与创建2.3 服务器获取Cookie与Cookie的修改2.4 Cookie的生命控制与生命周期2.5 Cookie有效路径Path设置3 Session会话技术3.1 初探Session3.2 Session的创建、获取与基本使用3.3 Session的生命控制…

使用Python的smtplib模块发送带附件的邮件

上一篇文章《使用Python的smtplib模块发送简单邮件》介绍了调用smtplib模块发送包含简单内容的邮件&#xff0c;本文继续学习参考文献1中的发送带附件的邮件的示例代码&#xff0c;同时由于参考文献1中的带附件邮件中并没有邮件附件&#xff0c;而仅仅是邮件内容中关联的内嵌资…

哪款半入耳式蓝牙耳机音质好?音质比较好的半入耳式蓝牙耳机推荐

半入耳式的蓝牙耳机相比入耳式的要舒适许多&#xff0c;佩戴更加的舒适透气&#xff0c;近年来&#xff0c;市面上的蓝牙耳机鱼龙混杂&#xff0c;人们选购蓝牙耳机对音质有一定的要求&#xff0c;下面是我整理的四款音质高的半入耳式蓝牙耳机&#xff0c;可以参考参考。 一、…