C++求职题

文章大部分内容转载https://www.cnblogs.com/lanxuezaipiao/p/4127904.html

1.冒泡排序法:

如果有N个数字需要排序,那么需要进行(N-1)趟循环,第i趟循环需要对比的次数为(N-i)。所以可以用双重循环,外层循环用于控制循环的趟数,内层循环用于控制每一趟循环的次数。

冒泡排序的优点:每进行一趟排序,就会少比较一次,因为每进行一趟排序都会找出一个较大值

冒泡排序法时间复杂度:

1).如果我们的数据正序,只需要走一趟即可完成排序。所需的比较次数C和记录移动次数M均达到最小值,即:Cmin=n-1;Mmin=0;所以,冒泡排序最好的时间复杂度为O(n)。

2).如果很不幸我们的数据是反序的,则需要进行n-1趟排序。每趟排序要进行n-i次比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值:冒泡排序的最坏时间复杂度为:O(n2) 。

综上所述:冒泡排序总的平均时间复杂度为:O(n2) 。

双重for循环实现冒泡排序法:

2.有1,2,…,n的无序数组,求排序算法,并且要求时间复杂度为O(n),空间复杂度O(1),使用交换,而且一次只能交换两个数。

这个题的特点是,数字是连续的如果是从1到n,那么最终排好序的数字和下标之间只差1,

,

3. 易误解:如果int a[5], 那么a与&a是等价的,因为两者地址相同。

一定要注意a与&a是不一样的,虽然两者地址相同,但意义不一样,&a是整个数组对象的首地址,而a是数组首地址,也就是a[0]的地址,a的类型是int[5],a[0]的类型是int,因此&a+1相当于a的地址值加上sizeof(int) * 5,也就是a[5],下一个对象的地址,已经越界了,而a+1相当于a的地址加上sizeof(int),即a[1]的地址。

4. 如何将一个小数分解成整数部分和小数部分?

采用库函数double modf(double x,double *integer)

#include<stdio.h>
#include<math.h>
int main(){
    double x,fraction,integer;
    while(~scanf("%lf",&x)){
        fraction=modf(x,&integer);
    printf("整数部分=%lf\n",integer);
    printf("小数部分=%lf\n",fraction);
    }
    return 0;
}

5. 可作为函数重载判断依据的有:参数个数、参数类型、参数的排列顺序、const修饰符;

   不可以作为重载判断依据的有:返回类型。

7. C的结构体和C++结构体的区别

(1)C的结构体内不允许有函数存在,C++允许有内部成员函数,且允许该函数是虚函数。所以C的结构体是没有构造函数、析   构函数、和this指针的。  

(2)C的结构体对内部成员变量的访问权限只能是public,而C++允许public,protected,private三种。

(3)C语言的结构体是不可以继承的,C++的结构体是可以从其他的结构体或者类继承过来的。

8. 如何在类中定义常量成员并为其初始化?

解答:只能在初始化列表里对const成员初始化,像下面这样:

class CBook {
public:const double m_price;
类中的构造函数是为了初始化类中的成员变量的,一般的成员变量可以在构造函数内部进行初始化,但是对于常量成员
只可以在构造函数名后面,用初始化列表的形式进行初始化。CBook() :m_price(8.8) { }
};

9. 在定义类的成员函数时使用mutable关键字的作用是什么?

解答:当需要在const方法中修改对象的数据成员时,可以在数据成员前使用mutable关键字,防止出现编译出错。例子如下:

class CBook {
public:mutable double m_price; // 如果不加就会出错CBook(double price) :m_price(price) { }double getPrice() const; // 定义const方法
};
double CBook::getPrice() const {m_price = 9.8;return m_price;
}

10. 拷贝构造函数在哪些情况下被调用?

(1)函数的参数为类对象且参数采用值传递方式;

(2)将类对象做为函数的返回值。

11.在C++中,如果确定了某一个构造函数的创建过程,在该构造函数中如果调用了其它重载的构造函数,它将不会执行其它构造函数的初始化列表部分代码,而是执行函数体代码,此时已经退化成普通函数了。例子说明如下:

class CBook {
public:double m_price;
这是一个构造函数CBook() {
///在这个无参的构造函数中调用了另外一个重载的构造函数,那么这个构造函数的初始化列表将不会执行。而是直接执行函数体。CBook(8.8);}
这个是一个重载的构造函数CBook(double price) : m_price(price) { }
};
int main() {CBook c;cout << c.m_price << endl; // 此时并不会输出理想中的8.8
}

12. 静态数据成员只能在全局区域进行初始化,而不能在类体中进行(构造函数中初始化也不行),且静态数据成员不涉及对象,因此不受类访问限定符的限制

class CBook {
public:static double m_price;
};
double CBook::m_price = 8.8;//只能在这里(全局区)进行初始化,不能在构造函数中进行初始化。

13. 重载++和–时是怎么区分前缀++和后缀++的?

例如当编译器看到++a(先自增)时,它就调用operator++(a);

但当编译器看到a++时,它就调用operator++(a, int)。即编译器通过调用不同的函数区别这两种形式这里的int 是一个占位符。

14.  C++的多态性分为静态多态和动态多态。

静态多态性:编译期间确定具体执行哪一项操作,主要是通过函数重载和运算符重载来实现的;可以通过(参数数量,参数类型,参数的顺序来重载)

动态多态性:运行时确定具体执行哪一项操作,主要是通过虚函数来实现的。

多态发生的条件:有继承,有虚函数的重写,有父类指针指向子类对象。

15. 虚函数原理考察

class A {
public:virtual void funa(); ///指针指向虚函数表virtual void funb();void func();  ///代码区static void fund();全局区static int si;   全局区
private:int i;    栈区char c;   栈区
};

关于类占用的内存空间,有以下几点需要注意:

(1)如果类中含有虚函数,则编译器需要为类构建虚函数表,类中需要存储一个指针指向这个虚函数表的首地址,注意不管有几个虚函数,都只建立一张表,所有的虚函数地址都存在这张表里,类中只需要一个指针指向虚函数表首地址即可。

(2)类中的静态成员是被类所有实例所共享的,它不计入sizeof计算的空间

(3)类中的普通函数或静态普通函数都存储在栈中,不计入sizeof计算的空间

(4)类成员采用字节对齐的方式分配空间

(5)类中的方法放在代码区

(6)static或者字符串常量放在数据区或者是常量区

(7)类中的普通成员变量放在栈中

(8)通过new分配的变量存储在堆区

C语言中的四区模型,栈区,堆区,代码区,常量区或者全局区

答案:12(32位系统)或16(64位系统)

16. 虚继承的作用是什么?

在多继承中,子类可能同时拥有多个父类,如果这些父类还有相同的父类(祖先类),那么在子类中就会有多份祖先类。例如,类B和类C都继承与类A,如果类D派生于B和C,那么类D中就会有两份A。为了防止在多继承中子类存在重复的父类情况,可以在父类继承时使用虚函数,即在类B和类C继承类A时使用virtual关键字。

17. 32位系统和64位系统各个数据类型所占的内存空间

类和结构体中一样,有四字节补齐效果,如果计算的总共的字节数,除上4之后的余数不为0,那么最终的所占字节数为上面所做除法的商再加上4个字节。例如,计算的总字节数为15,那么最终的字节数是12+4=16个字节。

const关键字:

1)欲阻止一个变量被改变,可以使用const关键字。在定义该const变量时,通常需要对它进行初始化。因为以后就没有机会再改变它了。

2)对指针来说,可以指定指针的本身为const,也可以指定指针所指向的数为const。或二者同时为const。

3)在一个函数的声明中,const可以修饰形参,表明它是一个输入参数。在函数内不能改变其值。

4)对于类的成员函数,若指定其为const类型。则表明其是一个常量函数。不能修改类的成员变量。

5)对于类的成员函数,有时候必须指定其返回值为const类型。以使得其返回值不为“左值”。

static关键字:

1)函数体内static变量的作用范围为函数体。不同于auto变量。该变量的内存只被分配一次。因此其值在下次调用时仍维持上次的值。

2)在模块内的static全局变量可以被模块内的所有函数访问。但不能被模块外的其他函数访问。

3)在模块内的static函数只可被这一模块内的其它函数调用。这个函数的使用范围被限制在声明它的模块内。

4)在类中的static成员变量属于整个类所有,对类的所有对象只有一份复制。

5)在类中的static成员函数属于整个类所有,这个函数不接受this指针,因而只能访问类的static成员变量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/252476.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

封装一个ViewPager真正的实现图片无限循环滚动带导航点

效果图&#xff1a; 大家在写项目的过程中常常会碰到须要实现Viewpager里面载入几张图片来循环自己主动轮播的效果&#xff0c;假设不封装一下的话代码分散在activity里面会显得非常乱。并且也不利于我们下次复用&#xff0c;所以这里我把viewpager的相关代码抽取出来放在了一个…

毕业论文页眉页脚页码插入

用word这么多年&#xff0c;第一次完整的操作了一遍页眉页脚页码的插入过程&#xff0c;其实三者都要要求奇偶页不同 1.页面布局-》右下角箭头-》版式-》奇偶页不同 因为文章不同的部分需要插入不同的页眉页脚页码&#xff0c;所以要在不同的部分插入分解符断开它们的连接 2、…

巴黎市中心降下2019年第一场雪

当地时间1月22日&#xff0c;法国巴黎市中心降下2019年第一场雪&#xff0c;气温也随之下降&#xff0c;街上的行人和车辆均有所减少。中新社记者 李洋 摄一对情侣在埃菲尔铁塔前合影留念。无家可归者在长椅上睡觉。游客在卢浮宫前拍照。

Echarts实现隐藏x轴,y轴,刻度线,网格

"yAxis": [{//就是一月份这个显示为一个线段&#xff0c;而不是数轴那种一个点点"show" : true,"boundaryGap": true,"type": "category","name": "时间","data": ["1月", "2…

Atom插件主题推荐

注意事项 主题和插件这方面,比 Sublime Text 人性化多了..一些比较用心的作者增加了二度设置功能。 何为二度设置,就是不用手写代码修改配置文件&#xff0c;点点鼠标&#xff0c;填填输入框就能生效&#xff0c;主题以 isotope-ui 这个做例子介绍,看图&#xff1a; 进入二度设…

印尼发生洪灾和山体滑坡 致多人死亡数千人撤离

当地时间1月23日&#xff0c;印尼南苏拉威西省望加锡居民受洪水影像&#xff0c;用竹筏运送摩托车。近日&#xff0c;印尼南苏拉威西省暴雨连连&#xff0c;造成洪灾和山体滑坡。目前&#xff0c;暴雨引发的洪灾和山体滑坡至少已造成8人死亡&#xff0c;数千人被迫撤离家园。。…

pycharm中无法import已经安装的ros中的库

使用pycharm写python程序&#xff0c;无法import 已经安装的ros包&#xff0c;并提示ImportError: No module named sensor_msgs.msg 解决方法如下 1. pycharm->file->settings->project:csvfile->project interpreter-> 点击右侧下三角选择 show all 2. 在弹…

tcp/ip知识点的总结

知识点搜集于网络&#xff0c;在加上自己的总结&#xff0c;还有很多不全&#xff0c;希望大家多提意见&#xff0c;共享学习&#xff01; 一、TCP/IP是什么&#xff1f; TCP/IP是一个协议族&#xff0c;而不是单独的协议。包括arp、ip、icmp、tcp、udp、http、ftp等协议 二、T…

imu_utils标定imu问题解决

在编译过程中遇到的一些问题可以参照这个女生的文章 https://blog.csdn.net/fang794735225/article/details/92804030 下面是imu_utils的主页&#xff0c;可以下载代码&#xff0c;也有使用步骤 https://github.com/gaowenliang/imu_utils 我下载了imu_utils主页最后面提供…

术语-服务:PaaS

ylbtech-术语-服务&#xff1a;PaaSPaaS是Platform-as-a-Service的缩写&#xff0c;意思是平台即服务。 把服务器平台作为一种服务提供的商业模式。通过网络进行程序提供的服务称之为SaaS(Software as a Service)&#xff0c;而云计算时代相应的服务器平台或者开发环境作为服务…

1.App瘦身经验总结

为什么apk越来越大&#xff1f; 1.项目不断发展&#xff0c;功能越多&#xff0c;代码量增加的同时&#xff0c;资源文件也在不断的增多2.app支持的主流dpi越来越多&#xff0c;如ldpi、mdpi、hdpi、xh xxh xxxh等等&#xff0c;间接导致资源增多3.引入的第三方sdk或开源库越来…

研究相机和IMU坐标系变换

刚开始录制的数据时没有考虑相机和IMU之间的坐标变换&#xff0c;但是后来发现跟踪效果不好&#xff0c;去查验imu数据时&#xff0c;发现&#xff0c;我采集保存的imu数据格式没有和euroc数据集中的imu数据保存格式统一&#xff0c;所以需要研究的是在euroc用于数据采集的设备…

第五天:Swift拖动 item 重排 CollectionView

参考链接:https://www.jianshu.com/p/96f956f1479e 1 import UIKit2 3 enum VC: String {4 case ViewController5 case CollectionViewController6 7 func segueIdentifier() -> String {8 switch self {9 case .ViewController:10 …

MIT Kimera阅读笔记

这两天在调研SLAM的最新算法&#xff0c;找到了2019CVPR上的一篇文章&#xff0c;出自于MIT&#xff0c;因为要给其他同事讲解&#xff0c;所以就把文章的重点内容在我个人理解的情况下翻译了出来&#xff0c;有理解不到位的还请各位大佬多多批评指正。 最后附上了Delaunay Tri…

YodaOS: 一个属于 Node.js 社区的操作系统

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; >>> 大家好&#xff0c;很开心在这里宣布 YodaOS开源了。他将承载 Rokid 4年以来对于人工智能和语音交互领域的沉淀&#xff0c;并选择 Node.js 作为操作系统的一等开发公民&#xff0…

Android顶部粘至视图具体解释

不知从某某时间開始&#xff0c;这样的效果開始在UI设计中流行起来了。让我们先来看看效果&#xff1a;大家在支付宝、美团等非常多App中都有使用。要实现这个效果&#xff0c;我们能够来分析下思路&#xff1a;我们肯定要用2个一样的布局来显示我们的粘至布局。一个是正常的、…

在实际项目开发中keil的调试方法

转载2015-06-14 20:23:04 一.在keilc的调试状态下&#xff0c;如何观察各个片内外设的运行状态&#xff1f;如何修改它们的设置&#xff1f;​ 在调试状态下&#xff0c;点击Peripherals菜单下的不同外设选项命令&#xff0c;就会显示或隐藏对应外设的观察窗口。 在程序运行时&…

小李飞刀:用python刷题ing....

叨逼叨 默认每天都要刷两道题。今天目标已完成。 第一题 26. 删除排序数组中的重复项难度&#xff1a;简单类型&#xff1a;数组 给定一个排序数组&#xff0c;你需要在原地删除重复出现的元素&#xff0c;使得每个元素只出现一次&#xff0c;返回移除后数组的新长度。不要使用…

VI-ORB环境配置

参考博客:https://blog.csdn.net/qq_38589460/article/details/82559816 https://blog.csdn.net/Robot_Starscream/article/details/90245456 本机安装的是opencv3.0 在Examples/ROS/ORB-VIO以及/VI-ORB/src/LearnVIORB-RT下的CMakeLists.txt都要进行修改 将find_package(O…

linux vg lv pv

pv由物理卷或者分区组成 pv可以组成一个或者多个vg vg可以分成多个lv 方便扩展 pvs vgs lvs 可以查看当前存在的pv vg lv 我的centos硬盘20g 使用了一段时间 加了100g 这时候 我们可以使用扩展来扩展我们的分区大小 查看自己拥有多少个硬盘 ls /dev/sd* | grep -v [0-9] …