赞
踩
A: vector的插入操作不会导致迭代器失效
B: map的插入操作不会导致迭代器失效
C: vector的删除操作只会导致指向被删除元素及后面的迭代器失效
D: map的删除操作只会导致指向被删除元素的迭代器失效
关于迭代器失效的意义
对于顺序结构的容器而言,这个是非常容易出现上述两个问题的。
vector的插入操作会导致,
两种情况:
vector的删除操作,会导致删除点后的元素都往前移动,那么删除点后元素的迭代器的意义都发生了改变。
对于底层结构是一颗链式结构的红黑树的容器map,删除元素只会导致当前元素的迭代器失效。
插入操作不会导致迭代器失效,对原有迭代器没有影响
答案:A
A: 公有继承的私有成员
B: 私有继承的公有成员
C: 公有继承的保护成员
D: 以上都错
想要派生类外访问类内的成员成员,那么就只有是派生类的public成员
,那么就只有,基类的public成员,且派生类public继承
答案:D
A: 派生类的对象可以赋给基类的对象
B: 派生类的对象可以初始化基类的引用
C: 派生类的对象可以直接访问基类中的成员
D: 派生类的对象的地址可以赋给指向基类的指针
这里主要涉及继承和多态的知识点,不了解可以参考多态杂谈和继承杂谈
派生类可以被基类的指针和引用访问。
派生类是访问自己继承的基类的成员的,因为是继承机制,但是不能访问基类对象的成员,因为会越界。
基类的私有成员在派生类种是不可见的,无法访问。参考Q2
答案:C
现在希望定义一个Head类,也想实现Look的功能,应该使用( )方法,实现代码重用。
A: 继承
B: 组合
C: 模板
D: 过滤
Head类可以继承这个Eye类,然后通过重定义/隐藏的方式实现这个Look功能,如果这是一个虚函数就能通过重写方式。
模板确实也算为了实现代码重用的机制,但是这是泛型编程中的思想,类名都是一样的,这里这明显用不了这个机制。
组合,我觉得或者和聚合应该是一个意思,是在一个类中创建另一个类的对象,然后通过调用指定接口的方式来实现代码重用
这个过滤是一种设计模型,这个是用多标准来同意一个标准,我认为主要并不是为了实现代码重用
答案:AB
A: 构造函数
B: 析构函数
C: 内联成员函数
D: 静态成员函数
虚函数是指函数能在继承关系中重写的一种函数,有virtual前缀
不过有一些特殊的情况,这是由于编译器的原因。
析构函数定义为虚函数时:基类指针可以指向派生类的对象(多态性),如果删除该指针delete []p;就会调用该指针指向的派生类析构函数,而派生类的析构函数又自动调用基类的析构函数,这样整个派生类的对象完全被释放
答案:B
比较简单
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;
}
};
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;
}
};
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。