备战秋招 | 笔试强训18

news2024/9/29 5:37:40

目录

一、选择题

二、编程题

三、选择题题解

四、编程题题解


一、选择题

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

A. STL容器是线程不安全的

B. 当容量不够时,STL的一个典型实现是vector内部内存扩展方式为翻倍

C. std::sort是稳定排序

D. std::bitset不是一个STL容器

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

A. vector

B. deque

C. list

D. map

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

A. list

B. vector

C. map

D. set

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

A. map

B. set

C. list

D. vector

5、STL中的一级容器有:

A. vector, deque, list, set, multiset, map, multimap.

B. 序列容器,关联容器,容器适配器

C. set, multiset, map, multimap.

D. vector, deque, list.

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

A. rbtree,queue

B. hashtable,heap

C. rbtree,heap

D. hashtable,queue

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

A. vector的插入操作不会导致迭代器失效

B. map的插入操作不会导致迭代器失效

C. vector的删除操作只会导致指向被删除元素及后面的迭代器失效

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

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

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

A. catch (A && x)

B. catch (A * x)

C. catch (A & x)

D. 以上都是

9、有如下程序段:则程序输出:

#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;
    return 0;
}

A. ~C()~B()~A()

B. ~C()~A()~B()

C. A)B)都有可能

D. 以上都不对

10、以下程序输出结果是___

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. 以上都不对

二、编程题

1、统计每个月兔子的总数  题目链接

2、字符串通配符  题目链接

三、选择题题解

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

A. STL容器是线程不安全的

B. 当容量不够时,STL的一个典型实现是vector内部内存扩展方式为翻倍

C. std::sort是稳定排序

D. std::bitset不是一个STL容器

正确答案:C

题解:

        sort是不稳定的排序,底层是使用快排的思想;STL中提供了一个稳定的排序,stable_sort,底层是使用归并排序的思想; 

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

A. vector

B. deque

C. list

D. map

正确答案:D

题解:

         map底层是红黑树,红黑树是二叉搜索树的一种;

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

A. list

B. vector

C. map

D. set

正确答案:B

题解:

        只有vector是在堆上申请一块连续的空间进行管理; 

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

A. map

B. set

C. list

D. vector

正确答案:D

题解:

         vector是申请一块连续的空间,在这块连续的空间依次存储数据;当在某个位置插入数据时,插入位置后面的数据都要挪动;

5、STL中的一级容器有:

A. vector, deque, list, set, multiset, map, multimap.

B. 序列容器,关联容器,容器适配器

C. set, multiset, map, multimap.

D. vector, deque, list.

正确答案:D

题解:

         首先我们要了解一级容器的概念,所谓一级容器就是存储数据类型不能是组合型的;如map,储存的是KeyValue键值对;故此题选D;

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

A. rbtree,queue

B. hashtable,heap

C. rbtree,heap

D. hashtable,queue

正确答案:B

题解:

         unordered_map底层是哈希表,priority_queue底层是堆;

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

A. vector的插入操作不会导致迭代器失效

B. map的插入操作不会导致迭代器失效

C. vector的删除操作只会导致指向被删除元素及后面的迭代器失效

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

正确答案:A

题解:

         vector的插入会导致迭代器失效;会影响插入以及插入位置后面的所有元素;

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

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

A. catch (A && x)

B. catch (A * x)

C. catch (A & x)

D. 以上都是

正确答案:B

题解:

         题目考察C++中的异常,throw的后面是new一个A类对象,返回A类型指针,若是失败了,catch那里参数必须是A类型指针才可以;故选B;

9、有如下程序段:则程序输出:

#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;
    return 0;
}

A. ~C()~B()~A()

B. ~C()~A()~B()

C. A)B)都有可能

D. 以上都不对

正确答案:D

题解:

         本题考察多态,我们创建了一个C类对象,C类对象继承了A类与B类,我们把new出来的对象的地址赋值给c,接着把从切片赋值给子类b1,这是我们再把b1赋值给类型完全没关系的A类指针a2,最后delete a2,此时会导致运行崩溃;

10、以下程序输出结果是___

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

题解:

         前面几次题目我们讲过,再构造函数内,我们调用虚函数并不会有多态,因此虚表指针都是再构造函数初始化对象的时候初始化的;我们再看题目,首先new一个子类,会先调用父类构造函数,父类构造函数调用test,test调用父类的func,打印0;接着就初始化子类那一部分,子类构造函数内调用test,test调用子类func,对m_iVal++并打印,打印1;最后将new出来的对象交给父类指针指向,父类指针调用test,test调用func,引发多态,父类指针调用虚函数,调用子类func,打印2;故选C;

四、编程题题解

1、统计每个月兔子的总数

思路:仔细阅读题目,我们不难发现,题目就是让我们求斐波那契数列的第n项;下图画出1到7月一月、二月、三月大的兔子的个数分别是多少;发现就是我们的斐波那契数列;

#include <iostream>
using namespace std;

int main() 
{
    int n;
    cin >> n;
    int f1 = 1;
    int f2 = 1;
    int f3;
    for(int i = 3; i <= n; i++)
    {
        f3 = f1 + f2;
        f1 = f2;
        f2 = f3;
    }
    cout << f3 << endl;
    return 0;
}

2、字符串通配符

思路:我们可以用递归的思想来解决该题,当我们遇到 '?'时,我们将分别指向这两个字符串的指针往后挪动一下;如果遇到‘*’时,我们可以分为三种情况,第一种情况是*不匹配任何字符,第二种情况*匹配一个字符,第三种情况*匹配两个即以上字符;具体看代码;

#include <cctype>
#include <iostream>
using namespace std;
bool strMach(const char* p, const char* q)
{
    // 双方都走完才算匹配
    if(*p == '\0' && *q == '\0')
        return true;
    // 只有其中一方走完不算匹配
    if(*p == '\0' || *q == '\0')
        return false;
    if(*p == '?' && (isalnum(*q) || isalpha(*q)))
        return strMach(p + 1, q + 1);
    else if(*p == '*' && (isalnum(*q) || isalpha(*q)))
    {
     while(*p=='*')
        {
          p++;
        } 
        p--;
        return strMach(p + 1, q)  // 匹配0个
        || strMach(p + 1, q + 1)  // 匹配1个
        || strMach(p, q + 1);     // 匹配多个
    }
    else if(tolower(*p) == tolower(*q))
        return strMach(p + 1, q + 1);
    return false;
}
 
int main()
{
    string pattern, str;
    cin >> pattern >> str;
    bool ret = strMach(pattern.c_str(), str.c_str());
    if(ret)
        cout << "true" << endl;
    else
        cout << "false" << endl;
    return 0;
}

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

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

相关文章

JS-----数据结构与算法(2)

目录 三. 栈结构 1.认识栈结构 2. 封装栈结构 3. 应用 3-1 十进制转二进制 3-2 进制转换法 四. 队列 1.队列是什么&#xff1f; 2.队列的封装 3. 队列的应用-击鼓传花 4. 双端队列 5.判断是否为回文 三. 栈结构 1.认识栈结构 栈&#xff08;stack&#xff09;又…

【计算机视觉中的 GAN 】 - 生成学习简介(1)

一、说明 在阅读本文之前&#xff0c;强烈建议先阅读预备知识&#xff0c;否则缺乏必要的推理基础。本文是相同理论GAN原理的具体化范例&#xff0c;阅读后有两个好处&#xff1a;1 巩固了已经建立的GAN基本概念 2 对具体应用的过程和套路进行常识学习&#xff0c;这种练习题一…

热备份路由协议原理

热备份路由协议原理 HSRP协议/VRRP协议热备份协议 热备份协议&#xff08;Hot Standby Protocol&#xff09; 是一种基于冗余设计的协议&#xff0c;用于提高网络的可靠性和冗余性。它允许多个设备共享同一个IP地址&#xff0c;其中一个设备被选为主设备&#xff0c;其他设备…

掌握Python的X篇_16_list的切片、len和in操作

接上篇掌握Python的X篇_15_list容器的基本使用&#xff0c;本篇进行进一步的介绍。 文章目录 1. list的索引下标可以是负数2. 切片&#xff08;slice&#xff09;2.1 切片基础知识2.2 如何“取到尽头”2.3 按照步长取元素2.4 逆序取值 3. len函数获取lis的元素个数4. in操作符…

Git 版本管理使用-介绍-示例

文章目录 Git是一种版本控制工具&#xff0c;它可以帮助程序员组织和管理代码的变更历史Git的使用方式&#xff1a;常见命令安装Git软件第一次上传分支删除分支 Git是一种版本控制工具&#xff0c;它可以帮助程序员组织和管理代码的变更历史 以下是Git的基本概念和使用方式&am…

AI 绘画Stable Diffusion 研究(二)sd模型ControlNet1.1 介绍与安装

部署包作者:秋葉aaaki 免责声明: 本安装包及启动器免费提供 无任何盈利目的 大家好&#xff0c;我是风雨无阻。 众所周知&#xff0c;StableDiffusion 是非常强大的AI绘图工具&#xff0c;需要详细了解StableDiffusion的朋友&#xff0c;可查看我之前的这篇文章&#xff1a; …

Qt6.5.2+WebRTC学习笔记(十三)开发环境搭建(macOS13.5)

前言 在ubuntu和win10开发测试一段时间了&#xff0c;但总在存在平台特性的问题&#xff0c;所以准备将程序移植到macOS上测试&#xff0c;同步进行三个主要桌面系统开发&#xff0c;本教程记录下环境搭建过程 一、准备 1.操作系统macOS13.5 64位 x86架构&#xff08;建议系…

tinkerCAD案例:22. Backpack Zipper Pull 背包拉链头

tinkerCAD案例&#xff1a;21. Custom Stamp 定制印章 原文 tinkerCAD案例&#xff1a;22. Backpack Zipper Pull 背包拉链头 Lesson Overview: 课程概述&#xff1a; Now we’re going to make a zipper pull! 现在我们要做一个拉链头&#xff01; Your backpack, howev…

【TypeScript】TS入门级基础学习(一)

【TypeScript】TS入门级基础学习&#xff08;一&#xff09; 一、前言 TypeScript 是一种用于应用程序规模的 JavaScript 语言。 TypeScript 向 JavaScript 添加了可选类型&#xff0c;支持用于任何浏览器、任何主机、任何操作系统的大规模 JavaScript 应用程序的工具。 Type…

【简历完善】- SLAM - 第一篇:卡尔曼滤波的学习

场景&#xff1a;晚上你需要从自己的卧室去上厕所&#xff0c;你知道家里的布局&#xff0c;了解自己的步长&#xff0c;但是没有灯。你如何才能走到厕所呢&#xff1f; 一些术语 “预测” “估计”。下面所说的预测和估计就是一回事。不同博客里面这两个词语大概意思也是一…

如何⾃定义⼀个SpringBoot Srarter

⾃定义⼀个SpringBoot Srarter 1、创建⼀个项⽬&#xff0c;命名为 demo-springboot-starter&#xff0c;引⼊SpringBoot相关依赖 2、编写配置⽂件 定义属性配置的前缀 3、⾃动装配 创建⾃动配置类HelloPropertiesConfigure 4、配置⾃动类 在 /resources/META-INF/spri…

ROS 基础知识汇总

How to learn ROS ROS for Beginners: How to Learn ROS - The Construct ROSwiki 界面介绍 ROS/Tutorials/NavigatingTheWiki - ROS Wiki ROS要学会哪些&#xff1f;如何学习Ros&#xff1f; - 知乎 setup.bash 的作用 ROS中的setup.bash_泠山的博客-CSDN博客 包的层级架构 …

ChatGPT长文本对话输入方法

ChatGPT PROMPTs Splitter 是一个开源工具&#xff0c;旨在帮助你将大量上下文数据分成更小的块发送到 ChatGPT 的提示&#xff0c;并根据如何处理所有块接收到 ChatGPT&#xff08;或其他具有字符限制的语言模型&#xff09;的方法。 推荐&#xff1a;用 NSDT设计器 快速搭建可…

如何搭建并部署抖音SEO源代码?

搭建并部署抖音SEO源代码&#xff0c;需要以下步骤&#xff1a; 购买服务器&#xff1a;在云服务商或者VPS提供商购买一台服务器&#xff0c;选择Linux系统。 安装LAMP/LEMP环境&#xff1a;LAMP是指Linux Apache MySQL PHP&#xff0c;LEMP是指Linux Nginx MySQL PHP。…

卷积的意义及其应用

卷积的意义及其应用 卷积的定义 我们将形如 ∫ − ∞ ∞ f ( τ ) g ( x − τ ) d τ \int^\infty_{-\infty} f(τ)g(x-τ)dτ ∫−∞∞​f(τ)g(x−τ)dτ 的式子称之为f&#xff08;x&#xff09;与g&#xff08;x&#xff09;的卷积记为 h ( x ) ( f ∗ g ) ( x ) h(x…

js开发技巧

1. 初始化数组 如果想要初始化一个指定长度的一维数组&#xff0c;并指定默认值&#xff0c;可以这样&#xff1a; const array Array(6).fill(); // [, , , , , ] 如果想要初始化一个指定长度的二维数组&#xff0c;并指定默认值&#xff0c;可以这样&#xff1a; const…

【尚硅谷】第01章:随堂复习与企业真题(Java语言概述)

来源&#xff1a;尚硅谷Java零基础全套视频教程(宋红康2023版&#xff0c;java入门自学必备) 基本都是宋老师发的资料里面的内容&#xff0c;只不过补充几个资料里没直接给出答案的问题的答案。 不想安装markdown笔记的app所以干脆在这里发一遍。 第01章&#xff1a;随堂复习…

电路原理分析1

d2的作用是提供一个1.25v的电平 r3、r4的作用都是限流 c1是滤波 运放的4、8脚是常规的外围 这个运放是一个运算放大电路 具体计算是这样的&#xff1a; 按照虚短原则&#xff0c;输入的信号Uinu1,输出的信号Uoutu3 按照虚断原则&#xff0c;i1i2i5i5 u1/r2i1i5&#xff…

windows使用多账户Git,多远程仓库版本管理

1 清除全局配置 git config --global --list // 看一下是否配置过user.name 和 user.email git config --global --unset user.name // 清除全局用户名 git config --global --unset user.email // 清除全局邮箱 2 本地仓库&#xff0c;每个远程对应的本地仓库目录下执行 $…

Redis缓存击穿问题以及解决方案

Redis缓存击穿问题以及解决方案 前言一、什么是Redis缓存击穿二、解决方案1.使用锁来解决使用锁的流程&#xff1a;核心思路&#xff1a;思路流程图&#xff1a;操作的锁的代码&#xff1a;业务的实现&#xff1a; 2.逻辑过期来解决思路分析&#xff1a;解决流程&#xff1a;业…