2022暑期复习-Day7

Posted Booksort

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022暑期复习-Day7相关的知识,希望对你有一定的参考价值。

目录

选择题

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

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

关于迭代器失效的意义

  • 野指针:访问越界了
  • 指向的意义改变了:迭代器不再指向希望指向的元素

对于顺序结构的容器而言,这个是非常容易出现上述两个问题的。

vector的插入操作会导致,
两种情况:

  1. 插入点后面的元素都会往后移动,指向的意义发生了改变
  2. 因为插入了元素,导致超出当前的最大容量,那么扩容就可能会导致整个开辟一个新的空间,将原来的元素拷贝到新的空间,且析构原空间。造成野指针

vector的删除操作,会导致删除点后的元素都往前移动,那么删除点后元素的迭代器的意义都发生了改变。

对于底层结构是一颗链式结构的红黑树的容器map,删除元素只会导致当前元素的迭代器失效。
插入操作不会导致迭代器失效,对原有迭代器没有影响

答案:A

Q2 派生类对象可以在类外访问基类成员中的( )。

A: 公有继承的私有成员
B: 私有继承的公有成员
C: 公有继承的保护成员
D: 以上都错

参考继承关系和访问限定符

想要派生类外访问类内的成员成员,那么就只有是派生类的public成员,那么就只有,基类的public成员,且派生类public继承

答案:D

Q3 在公有派生情况下,有关派生类对象和基类对象的关系,下列叙述不正确的是( )。

A: 派生类的对象可以赋给基类的对象
B: 派生类的对象可以初始化基类的引用
C: 派生类的对象可以直接访问基类中的成员
D: 派生类的对象的地址可以赋给指向基类的指针

这里主要涉及继承和多态的知识点,不了解可以参考多态杂谈继承杂谈

派生类可以被基类的指针和引用访问。

派生类是访问自己继承的基类的成员的,因为是继承机制,但是不能访问基类对象的成员,因为会越界。

基类的私有成员在派生类种是不可见的,无法访问。参考Q2

答案:C

Q4 、有这样一个类:


现在希望定义一个Head类,也想实现Look的功能,应该使用( )方法,实现代码重用。
A: 继承
B: 组合
C: 模板
D: 过滤

Head类可以继承这个Eye类,然后通过重定义/隐藏的方式实现这个Look功能,如果这是一个虚函数就能通过重写方式。

模板确实也算为了实现代码重用的机制,但是这是泛型编程中的思想,类名都是一样的,这里这明显用不了这个机制。

组合,我觉得或者和聚合应该是一个意思,是在一个类中创建另一个类的对象,然后通过调用指定接口的方式来实现代码重用

这个过滤是一种设计模型,这个是用多标准来同意一个标准,我认为主要并不是为了实现代码重用

答案:AB

Q5 下列哪种函数可以定义为虚函数( )。

A: 构造函数
B: 析构函数
C: 内联成员函数
D: 静态成员函数

虚函数是指函数能在继承关系中重写的一种函数,有virtual前缀
不过有一些特殊的情况,这是由于编译器的原因。

析构函数定义为虚函数时:基类指针可以指向派生类的对象(多态性),如果删除该指针delete []p;就会调用该指针指向的派生类析构函数,而派生类的析构函数又自动调用基类的析构函数,这样整个派生类的对象完全被释放

答案:B

编程题

比较简单

Q6

class Solution 
public:
    vector<vector<int>> construct2DArray(vector<int>& original, int m, int n) 
        vector<vector<int>> ret;
        if(original.size()!=m*n)
        
            return ret;
        
        int a = 0;
        for(int i = 0;i<m;i++)
        
            vector<int> v;
            for(int j = 0;j<n;j++)
            
                v.push_back(original[a]);
                a++;
            
            ret.push_back(v);
        
        return ret;
    
;

Q7

class Solution 
public:
    vector<string> buildArray(vector<int>& target, int n) 
        vector<string> ret;
        int a = 0;
        for(int i=1;i<=n;i++)
        
            if(a<target.size())
             
                if(target[a]==i)
                
                    ret.push_back("Push");
                    a++;
                
                else if(target[a]!=i)
                
                    ret.push_back("Push");
                    ret.push_back("Pop");
                
            
        
        return ret;
    
;

以上是关于2022暑期复习-Day7的主要内容,如果未能解决你的问题,请参考以下文章

盘一盘Java中的abstract和interface(备战2022春招或暑期实习,每天进步一点点,打卡100天,Day7)

2022暑期复习-Day5

2022暑期复习-Day5

2022暑期复习-Day6

2022暑期复习-Day4

2022暑期复习-Day6