2022暑期复习-Day5

Posted Booksort

tags:

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

目录

选择题

Q1 下面有关友元函数与成员函数的区别,描述错误的是( )。

A: 友元函数中可以访问一个类中任何访问权限修饰的成员
B: 友元函数和类的成员函数都可以访问类的私有成员变量或者是成员函数
C: 类的成员函数是属于类的,调用的时候是通过指针this调用的
D: 友元函数是有关键字friend修饰,调用的时候也是通过指针this调用的

友元函数是指某些虽然不是类成员函数却能够访问类的所有成员的函数。类授予它的友元特别的访问权,这样该友元函数就能访问到类中的所有成员
比如说要实现自定义类型的 << >>运算符重载

友元函数是不是成员函数,并不具备this指针,不用this来调用友元函数,只是可以通过this指针访问任意权限的成员。

答案:D

Q2 main 函数执行以前,还会执行什么代码( )。

A: 全局对象的构造函数
B: 全局对象的析构函数
C: 局部对象的构造函数
D: 局部对象的析构函数

具体分析,可以参考2022暑期复习-Day4-Q3

全局对象的生命周期是整个程序的生命周期

答案:A

Q3 若要对 data 类中重载的加法运算符成员函数进行声明,下列选项中正确的是( )。

A: Data operator+(Data);
B: Data operator(Data);
C: operator+(Data,Data);
D: Data+(Data);

根据重载函数的写法是 this + 对象
所以,正确写法是A,成员函数有隐藏的this指针

答案:A

Q4 下面有关 new/delete 和 malloc/free 的区别,描述错误的是( )。

A: malloc与free是标准库函数,new/delete是运算符
B: new初始化对象,调用对象的构造函数,malloc仅仅分配内存
C: new、delete只能在C++使用,而malloc、free只能在C中可以使用
D: new返回的是所分配类型变量(对象)的指针,malloc返回的是void指针

malloc是标准库函数,new / delete虽然是封装了malloc和free。
但是其是运算符重载。new / delete是运算符

C++的向下继承的,可以调用malloc/free,但是C语言是不具备C++的特性是无法调用new/delete

答案:C

Q5 有如下类模板定义:

template<class T>
class BigNumber
	long n;
public:
	BigNumber(T i)
		:n(i)
	
	BigNumber operator+(BigNumber b)
	
		return BigNumber(n+b.n);
	
;

已知 b1,b2 是 BigNumber 的两个对象,则下列表达式中错误的是( )

A: 3+3
B: b1+3
C: b1+b2
D: 3+b1

3+b1,没有实现者相关的运算符重载的功能,其他都是能正常运行的。

答案:D

编程题

Q6


有序的就用二分查找,就不用依次遍历或者使用哈希来。

class Solution 
public:
    int find(vector<int>& numbers,int left,int right,int target) 
    
        while(left<=right)
        
            int mid =left + ((right-left)>>1);
            if(numbers[mid]<target)
            
                left = mid +1;
            
            else if(numbers[mid]>target)
            
                right= mid -1;
            
            else
            
                return mid;
            
        
        return -1;
    
    vector<int> twoSum(vector<int>& numbers, int target) 
        
        vector<int> ret;
        for(int i = 0;i<numbers.size();i++)
        
            int tar = target - numbers[i];
            
            int index = find(numbers,i+1 ,numbers.size()-1,tar);
            if(index!=-1)
            
                ret.push_back(i);
                ret.push_back(index);
                return ret;
            
        
        return ret;
    
;

Q7

本题本质上是找众数

Plan1

class Solution 
public:
    int majorityElement(vector<int>& nums) 
        sort(nums.begin(),nums.end());
        return nums[((0+nums.size())>>1)];
    
;

Plan2
作为众数,如果它是正数+1,其他都是负数-1的,最后相加在一起,得到的一定是大于0的

class Solution 
public:
    int majorityElement(vector<int>& nums) 
        int count =0 ;
        int flag=-1;
        for(int i =0;i<nums.size();i++)
        
            if(count==0)
            
                flag = nums[i];
                count++;
            
            else if(flag==nums[i])//相等就++
                count++;
            else//不相等--
                count--;
        
        return flag;//最后得到的众数,其计数一定是>0
    
;

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

还在频繁定义常量?不试试用枚举代替(备战2022春招或暑期实习,每天进步一点点,打卡100天,Day5)

2022暑期复习-Day4

2022暑期复习-Day6

2022暑期复习-Day3

2022暑期复习-Day3

2022暑期复习-Day1