码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【笔试题】【day18】


    目录

    第一题(STL的相关知识)

    第二题(STL中的一级容器)

    第三题(unordered_map和priority_queue使用的底层数据结构)

    第四题(迭代器失效)

    第五题(异常捕获)

    第六题(动态转换)


    第一题(STL的相关知识)

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

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

    A:STL的容器都是线程不安全的。也就是在多线程的情况下,我们需要自己去加锁进行控制

    B:有的STL的vector的增长不一定是翻倍

    C:sort是一个STL里面的排序算法,它底层是一个插入排序+快速排序构成的。当我们的数据量小于一定的阈值的时候是直接采用插入排序的。如果数据量比较大,采用的是快速排序,也就会导致我们的数据不稳定。

    (也就是重复的数据,比方说有3个2,在我们排完之后,我们这3个2之间的顺序发生了变化,就是不稳定)

    D:bitset是一个位集合,不是容器

     C

    第二题(STL中的一级容器)

    STL中的一级容器有:

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

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

    STL中的容器是按照序列式容器和关联式容器进行划分的

    序列式容器:线性结构

    vector list

    关联式容器:非线性

    map set

    一级容器:数据类型不能是组合类型,只能是基本类型

    vector<>的<>中可以写int ,double等等

    组合类型:

    map中必须写值对结构(key-value)(pair)

    map ,也就是说我们的map中必须是关键值和实值组成。

    set底层是红黑树,红黑树在实现的时候,值类型往往都是一个组合,这个组合往往是通过pair来实现的。

    D 

    第三题(unordered_map和priority_queue使用的底层数据结构)

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

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

    使用到的底层结构:就是适配器

    STL中一共有6大组件:空间配置器、容器、算法、迭代器、仿函数、适配器

    适配器主要有:

    栈和队列是通过双端队列实现的(deque)

    优先级队列是通过vector去进行实现的,因为它经常需要被访问

    map和set底层是通过红黑树去进行实现的rbtree(严格来说,这里不是适配器,因为底层是用红黑树直接写死的,不能更改的)

    unordered_set(hash_map)和unordered_set(hash_set)它们的底层的实现结构都是hashtable,也就是哈希表来实现的

    所以按照我们上面的说法,我们的unordered_map的底层是通过hash_map来实现的,而我们的priority_queue是通过vector实现的,但是这个vector想要实现的是一个堆,并且是一个大根堆(默认) 

    B 

    第四题(迭代器失效)

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

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

    迭代器失效:

    插入数据(扩容)

    删除数据(数据移动)

    (原来的迭代器所指向的空间位置无效了,就是迭代器失效)

    A:会导致迭代器失效,因为我们在插入的时候,万一我们的vector发生了扩容,重新malloc了一块地址,我们的迭代器就失效了

    B:正确

    C:因为向量在删除某一个数据之后,后面的数据会往前移动,那么我们所指向的位置以及后面的元素就有可能失效了。

    D:我们删除了当前的结点,那么当前节点的迭代器肯定失效。

    A 

    第五题(异常捕获)

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

    1. class A {
    2. public:
    3. A(){}
    4. };
    5. void foo(){
    6. throw new A;
    7. }

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

     这里我们new了一个对象A,也就是返回一个A类型的地址,所以我们需要接收A的类型的指针类型,也就是catch(A *x)

    B 

    第六题(动态转换)

    1. #include
    2. using namespace std;
    3. class A {
    4. public:
    5. ~A() {
    6. cout << "~A()";
    7. }
    8. };
    9. class B{
    10. public:
    11. virtual ~B() {
    12. cout << "~B()";
    13. } }
    14. ;
    15. class C: public A, public B {
    16. public:
    17. ~C() {
    18. cout << "~C()";
    19. }
    20. };
    21. int main() {
    22. C * c = new C;
    23. B * b1 = dynamic_cast(c);
    24. A * a2 = dynamic_cast(b1);
    25. delete a2;
    26. }

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

    A与B没有关系,C同时继承了A和B

    然后创建一个子类的指针c指向子类的对象C

    然后创建一个父类的指针b1去接收c

    然后将b1强行转换给a类指针a2,但是我们的A和B两类之间并没有任何关系

    但是我们在释放a2,也就是释放a所指向的空间,也就是我们想要去释放子类c中的空间。

    因为动态转换之后,会导致它的释放指向子类,

    但是由于我们的A类和B类之间没有任何关系,所以在释放A类的时候会导致程序崩溃。

    D

  • 相关阅读:
    CoCube传感器MPU6050笔记
    认识CSS颜色
    Flet教程之 08 AppBar工具栏基础入门(教程含源码)
    代码随想录算法训练营第53天 | ● 1143.最长公共子序列 ● 1035.不相交的线 ● 53. 最大子序和
    基于java的出租车预约系统
    C++11
    将使用回调函数作为参数的函数改造为返回 Promise 的一个具体例子
    SQL: MAX Function
    Mysql 5.7 创建索引官方解读
    算法:包含min函数的栈
  • 原文地址:https://blog.csdn.net/weixin_62684026/article/details/127601654
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号