【C++笔试强训】第十八天
创始人
2024-01-18 17:38:14
0

🎇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 
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(c);A * a2 = dynamic_cast(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<func();}public:int m_iVal;
};
class B : public A
{
public:B(){test();}virtual void func(){++m_iVal;std::cout<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 
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 
#include 
using namespace std;
bool match(const char* pattern, const char* str) {//当前字符结束,返回trueif (*pattern == '\0' && *str == '\0')return true;//两个字符串有一个先结束,则返回falseif (*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;elsecout << "false" << endl;}return 0;
}

相关内容

热门资讯

图片怎么做成GIF动态图?分享... 在互联网时代,图片和动态图的应用越来越广泛。而GIF动态图可以展示连续的图片ÿ...
代码随想录算法训练营第三十八天... 理论基础 1、什么是动态规划? 动态规划,英文:Dynam...
聚集性活动疫情防控方案 聚集性活动疫情防控方案(通用12篇)  为了确定活动的圆满进行,通常需要提前准备好一份活动方案,活动...
跳蚤市场活动方案 跳蚤市场活动方案跳蚤市场活动方案1  一、活动设计意图:  通过让幼儿参与跳蚤市场的买卖活动,将不用...
【SCL】实现简单算法--冒泡... 使用SCL语言实现一个冒泡排序的简单算法 文章目录 目录 文章目录 前言 二、实现排序 1.读...
幼儿园健康游戏活动方案 幼儿园健康游戏活动方案(精选11篇)  为了确保我们的努力取得实效,我们需要事先制定方案,方案是书面...
2023前端求职经历回顾及面试... 文章目录前言一、求职经历二、前端面经1. 投简历的正确打开方式2. 面经及面试题复盘外企面经、面试题...
Javascript如何截取含... Javascript如何截取含有表情的字符串 一、说说背景 社区社交应用中,难免会有输...
【Hello Linux】进程... 作者:@小萌新 专栏:@Linux 作者简介࿱...
读书的活动方案 关于读书的活动方案(通用6篇)  为了确保活动有序地进行,常常需要提前进行细致的活动方案准备工作,活...
学校综合实践活动方案 学校综合实践活动方案(精选20篇)  为了确保工作或事情顺利进行,通常需要预先制定一份完整的方案,方...
志愿者日活动方案 志愿者日活动方案(精选14篇)  为确保活动顺利开展,常常需要预先制定活动方案,活动方案指的是为某一...
小学生书画展活动方案 小学生书画展活动方案范文  为了确保活动能成功举办,常常需要提前准备一份具体、详细、针对性强的活动方...
.vscode 文件夹是什么,... 文章目录背景extensions.jsonsetting.jsonlaunch.jsontask.j...
jsp学生成绩分析及报表打印系... 一、源码特点      JSP学生成绩分析及报表打印系统是一套完善的java web信息管理系统&#...
节约用水主题班会活动方案 节约用水主题班会活动方案(通用6篇)  为了确保活动能无误进行,通常需要提前准备好一份活动方案,一份...
冬游活动方案 冬游活动方案  活动方案的建议  一、活动方案名称  尽可能具体的写出方案名称,如“2012年6月2...
[IDEA_SpringBoo... 关于yml以及yaml配置文件无法被识别的问题 原因可能是 未被加载到spring中/或者是并没有被...
质量月活动方案 质量月活动方案  活动方案的建议  一、活动方案名称  尽可能具体的写出方案名称,如“2012年6月...
Node.js安装与配置 ✅作者简介:CSDN一位小博主,正在学习前端,欢迎大家一起...