牛客模拟面试7月19

说一说常用的 Linux 命令

常用的 Linux 命令有:

命令说明
cd切换当前目录
ls查看当前文件与目录
grep通常与管道命令一起使用,用于对一些命令的输出进行筛选加工
cp复制文件或文件夹
mv移动文件或文件夹
rm删除文件或文件夹
ps查看进程情况
kill向进程发送信号
tar对文件进行打包
cat查看文件内容
top查看操作系统的信息,如进程、CPU占用率、内存信息等(实时)
free查看内存使用情况
pwd显示当前工作目录

说一说C++ 中哪些函数不能是虚函数?

普通函数(非成员函数)、构造函数、析构函数、友元函数、静态成员函数、内联成员函数

【参考答案】

标准回答

C++ 中,普通函数(非成员函数)、构造函数、友元函数、静态成员函数、内联成员函数这些不能是虚函数。

  1. 普通函数(非成员函数)

普通函数(非成员函数)只能被重载,不能被重写,所以声明为虚函数也没有意义,编译器编译时就会绑定函数地址。

  1. 构造函数

创建派生类对象时,会调用派生类的构造函数,派生类的构造函数中将会调用基类的一个构造函数,这种顺序不同于继承机制。因此派生类不继承基类的构造函数,所以将构造函数声明为虚函数没有意义。

  1. 友元函数

友元函数不是类成员,而只有成员函数才能是虚函数。

  1. 静态成员函数

静态成员函数对于每个类来说只有一份代码,所有的对象都共享这一份代码,没有动态绑定的必要性。静态成员函数属于一个类而非某一对象,没有this 指针,它无法进行对象的判别。

  1. 内联成员函数

内联函数在编译时被展开,虚函数在运行时才能动态的绑定函数。

说一说STL 中有哪些常见的容器

  1. 顺序容器

容器并非排序的,元素的插入位置同元素的值无关,包含vector、deque、list。

o vector:动态数组

元素在内存连续存放。随机存取任何元素都能在常数时间完成。在尾端增删元素具有较佳的性能。

o deque:双向队列

元素在内存连续存放。随机存取任何元素都能在常数时间完成(仅次于vector )。在两端增删元素具有较佳的性能(大部分情况下是常数时间)。

o list:双向链表

元素在内存不连续存放。在任何位置增删元素都能在常数时间完成。不支持随机存取。

  1. 关联式容器

元素是排序的;插入任何元素,都按相应的排序规则来确定其位置;在查找时具有非常好的性能;通常以平衡二叉树的方式实现,包含set、multiset、map、multimap。

o set/multiset

set中不允许相同元素,multiset 中允许存在相同元素。

o map/multimap

map 与 set 的不同在于 map 中存放的元素有且仅有两个成员变,一个名为 first,另一个名为 second,map 根据 first 值对元素从小到大排序,并可快速地根据 first 来检索元素。map 和multimap 的不同在于是否允许相同 first 值的元素。

  1. 容器适配器

封装了一些基本的容器,使之具备了新的函数功能,包含stack、queue、priority_queue。

o stack:栈

栈是项的有限序列,并满足序列中被删除、检索和修改的项只能是最进插入序列的项(栈顶的项),后进先出。

o queue:队列

插入只可以在尾部进行,删除、检索和修改只允许从头部进行,先进先出。

o priority_queue:优先级队列

内部维持某种有序,然后确保优先级最高的元素总是位于头部,最高优先级元素总是第一个出列。

给定一个长度为 的无序数组 ,包含正数、负数和 0 ,请从中找出 3 个数,使得乘积最大,返回这个乘积。 要求时间复杂度: ,空间复杂度: 。

long long solve(int* A, int ALen) {
        // write code here
        int min1 = INT_MAX, min2 = INT_MAX;
        // 最大的、第二大的和第三大的
        int max1 = INT_MIN, max2 = INT_MIN, max3 = INT_MIN;

        for (int i=0;i<ALen;i++) {
            if (A[i] < min1) {
                min2 = min1;
                min1 = A[i];
            } else if (A[i] < min2) {
                min2 = A[i];
            }

            if (A[i] > max1) {
                max3 = max2;
                max2 = max1;
                max1 = A[i];
            } else if (A[i] > max2) {
                max3 = max2;
                max2 = A[i];
            } else if (A[i] > max3) {
                max3 = A[i];
            }
        }

        return max((long long)min1 * min2 * max1,(long long) max1 * max2 * max3);

    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值