2022暑期复习-Day6
Posted Booksort
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022暑期复习-Day6相关的知识,希望对你有一定的参考价值。
目录
选择题
Q1 关于类模板的说法正确的是()
A: 类模板的主要作用是生成抽象类
B: 类模板实例化时,编译器根据给出的模板实参生成一个类
C: 在类模板中的数据成员具有同样类型
D: 类模板中的成员函数没有返回值
类模板在编译器对其实例化时会自动创建/隐式创建一个响应类型的类。
生成抽象类是继承中的一种应用,有时候,用不到
类模板中的成员,对于类型的实例化,并不一定只有一种类型
类模板的函数要实例化才能使用,而函数使用就需要返回值
答案:B
Q2 下列代码可以通过编译吗?( )选项修改使其通过编译
A: 编译通过
B: 应该去掉static关键字
C: 调用应该如下: sum<int>:: foo(1,3)
D: 调用应该如下: sum::<int>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<int>::iterator
支持“+”、“+=”、“<”等操作符
D: list<int>::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;
;
都加了判断,所以不用担心越界访问的问题。
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;
;
以上是关于2022暑期复习-Day6的主要内容,如果未能解决你的问题,请参考以下文章