2022暑期复习-Day7
Posted Booksort
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022暑期复习-Day7相关的知识,希望对你有一定的参考价值。
目录
选择题
Q1 下面关于迭代器失效的描述哪个是错误的( )。
A: vector的插入操作不会导致迭代器失效
B: map的插入操作不会导致迭代器失效
C: vector的删除操作只会导致指向被删除元素及后面的迭代器失效
D: map的删除操作只会导致指向被删除元素的迭代器失效
关于迭代器失效的意义
- 野指针:访问越界了
- 指向的意义改变了:迭代器不再指向希望指向的元素
对于顺序结构的容器而言,这个是非常容易出现上述两个问题的。
vector的插入操作会导致,
两种情况:
- 插入点后面的元素都会往后移动,指向的意义发生了改变
- 因为插入了元素,导致超出当前的最大容量,那么扩容就可能会导致整个开辟一个新的空间,将原来的元素拷贝到新的空间,且析构原空间。造成野指针
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)