• 2022暑期复习-Day6


    选择题

    Q1 关于类模板的说法正确的是()

    A: 类模板的主要作用是生成抽象类
    B: 类模板实例化时,编译器根据给出的模板实参生成一个类
    C: 在类模板中的数据成员具有同样类型
    D: 类模板中的成员函数没有返回值

    类模板在编译器对其实例化时会自动创建/隐式创建一个响应类型的类。

    生成抽象类是继承中的一种应用,有时候,用不到

    类模板中的成员,对于类型的实例化,并不一定只有一种类型

    类模板的函数要实例化才能使用,而函数使用就需要返回值

    答案:B

    Q2 下列代码可以通过编译吗?( )选项修改使其通过编译

    在这里插入图片描述
    A: 编译通过
    B: 应该去掉static关键字
    C: 调用应该如下: sum:: foo(1,3)
    D: 调用应该如下: sum::foo(1,3)

    就算是静态成员函数,没有this指针,不需要通过对象来调用,但还是需要指定类域,且这是一个模板函数,也算需要实例化的

    答案:C

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

    A: STL容器是线程不安全的
    B: 当容量不够时,vector内部按照倍数方式扩容的
    C: std::sort是稳定排序
    D: std::stack默认是用deque实现的

    STL的容器并不是线程安全的,这点可以看看侯捷老师的书

    STL实现vector容器扩容是以 1.5倍或2倍的容量进行扩容,这是经过计算和在插入与时间上的考量

    std的sort底层就是快排,快排是不稳定的,会导致数据交换,时间复杂度最坏情况下可以到达O(N^2)。具体可以参考2022暑期复习-Day2-Q1

    STL的stack和queue实际上都是一个容器适配器,就算再某个容器的基础上封装了一定的功能。
    底层是deque,这个容器本来像解决解决链式结构和顺序结构的缺陷,结合顺序结构随机存取的特性和链式结构任意插入删除的特性,最和结合出来一个分段数组,每个数组里都是一个链式结构的东西。最后失败了

    Q4 关于 stack 和 queue 的说法正确的是( )。

    A: stack底层默认使用vector实现,queue底层默认使用list实现
    B: 获取stack和queue中任意元素操作的时间复杂度为O(n)
    C: stack 和 queue 都可以称为容器适配器,因为其底层就是将某个容器重新包装了,默认包装的是deque
    D: stack 和 queue 中插入、删除时间复杂度为O(1),遍历时间复杂度为O(n)

    栈和队列想要查找元素是需要一个个去遍历的,所以时间复杂度是O(N)
    而插入和删除,这一点是可以直接操作,不需要遍历之类的。

    答案:BCD

    Q5 下面有关 vector 和 list 的区别,描述错误的是( )。

    A: vector拥有一段连续的内存空间,因此支持随机存取,如果需要高效的随即存取
    B: list拥有一段不连续的内存空间,如果需要大量的插入和删除,应该使用list
    C: vector::iterator支持“+”、“+=”、“<”等操作符
    D: list::iterator则不支持“+”、“+=”、“<”等操作符运算,但是支持了[ ]运算符

    vector和list,顺序结构和链式结构的特性
    对于容器的迭代器而言,实际上可以看成是封装了的指针。
    链表又不能随机存储,[]运算符重载是不具备的

    答案:D

    编程题

    Q6

    在这里插入图片描述

    class Solution {
    public:
        vector<int> sortArrayByParityII(vector<int>& nums) {
            int odd = 1;//负责找奇数下标中的偶数
            int even = 0;//负责找偶数下标中的奇数
            int len = nums.size();
            while(odd<len|| even<len)
            {
                while(odd<len && nums[odd]%2==1)
                    odd+=2;
                while(even<len && nums[even]%2==0)
                    even += 2;
                if(odd<len&&even<len)
                {
                    int tmp = nums[odd];
                    nums[odd] = nums[even];
                    nums[even] = tmp;
                }
            }
            return nums;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    都加了判断,所以不用担心越界访问的问题。

    Q7

    在这里插入图片描述
    像这个题目,使用动态规划比使用滑动窗口来的简单快。
    滑动窗口 需要把握 窗口区间的左右移动,在本题中没有那么明显的边界判断,所不是很好用

    class Solution {
    public:
        int maxSubArray(vector<int>& nums) {
            int Max=nums[0];
            int sum=0;
            for(auto num:nums)
            {
                sum=max(sum+num,num);
                if(Max<sum)
                    Max=sum;
            }
            return Max;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  • 相关阅读:
    java并发问题记录
    单链表基本操作-查找
    AutoJSPro薅羊毛脚本源码
    红队打点总结大全
    鸿蒙开发游戏(三)---大鱼吃小鱼(放置NPC)
    【重磅+测评】Jetbrain发布Rust IDE,免费使用一年
    RuntimeError: cuDNN error: CUDNN_STATUS_INTERNAL_ERROR
    【Ubuntu/Debian】Linux发行版之Ubuntu/Debian关于开机自启和关机自执行的实现
    Milvus 介绍
    Keras学习记录之模型
  • 原文地址:https://blog.csdn.net/weixin_52199109/article/details/125893269