• 笔试面试之C++


    7 类B是类A的公有派生类, 类A和类B中都定义了虚函数func()p 是一个指向类A对象的指针,则p->A::func()将() 
    A 调用类A中的函数 
    B 调用类B中的函数 
    C 根据p所指向的对象类型而确定调用类A中的函数或类B的函数 
    D 都调用

    13 下列语句正确的是() 
    int a, &ra = a, &&ref = ra 
    int &rafa[10] 
    int a,&ra = a, &*refp = &ra 
    int *pf, *&pref = pi

     

    22 程序段如下:

    void GetValue(char* p){
        p = (char*)malloc(100);
    }
    void Test(){
        char* str = NULL;
        GetValue(str);
        strcpy(str, "Perfect");
        strcpy(str + 2, "World");
        printf(str);
    }

    运行Test()结果为() 
    A Perfect World B Rfect World 
    C PeWorld  D.程序崩溃

    malloc和new共同点都是申请一段内存空间,然后返回指针,这里是传值调用,不能改变指针!

    23 静态变量的默认值是多少() 

    A.0B 1 C 内存随机值 D 依赖编译器决定

    STL的使用

     28 如果一个有序的vector/map/set 中进行数据查找,哪一个查找复杂度更低() 
    A vector B map C set D 时间复杂度一样

     29 关于stl描述正确的是() 
    A stl容器是多线程安全的。 
    B stl的vector查找效率一般比map快 
    C 往stl容器放入对象是直接拷贝一份对象到容易中,这部分内存由容易管理 
    D stl的栈是采用红黑书实现的。

    这两题都是考察的STL,看来完美对于STL考察的还是很多的,几个常考的容器中,

    顺序容器有:vector,deque,array,list,

    其中,vector,deque,array,都是连续分配的内存,所以支持快速随机访问,

    vector 和deque可变内存大小,vector可以快速在尾部插入和删除,deque可以快速在头部和尾部插入和删除,两者在中间插入和删除的速度都很慢,因为他们的数据结构可以很容易看出查找为线性查找,复杂度为O(n)

    list:明显是链式的,所以在任意位置插入和删除都很快,但是不支持快速随机访问,只能顺序访问

     

    而map,set等采用的是红黑树,他们的查找速率为O(logN)

    至于哈希查找,则是无序的,unorderd_map,查找速率为O(1);

    另外STL容器并不是线程安全的,读写和写写同时对同一容器访问时需要加锁

    vector::at和vector[]:

    第一个做边界检查,第二个不做边界检查

     

    26 c++ STl中list使用的迭代器类型为() 
    A Input iterator B Forward iterator 
    C Bidirectional iterator D Random Access Iterator

    迭代器类型有

    input iterator ,output iterator(输入:只读不写,输出迭代器:只写不读)

    Forward iterator(包括上面两个所有功能,但只能在序列中单向移动)

    Bidrectional iterator(包括上面所有两个功能,可以在序列中双向移动)

    Random Access iterator(包括上面所有功能,同时支持常数时间内随机访问元素)

    1.已经烂大街的i++和++i你真的懂了吗?函数参数你理解了几何?

    int i=3;

    printf("%d %d",i++,i++);和printf("%d %d",++i,++i);

    输出的分别是4,3和5,5      

    知识点:1.i++的含义是返回一个常量,这个常量的值=i,然后再将i=i+1;

                  2.++i的含义是将i=i+1,然后返回i这个变量

                  3.函数参数入栈的顺序是从右到左

                  4.gcc编译条件下第一种情况是用寄存器暂时存储i++得到的常量,然后入栈

                         第二种情况是将i++得到的变量i直接入栈

                  5.printf(“%d%d”,*i++);实际上是printf(“%d%d”,*(i++)),在i自增之前返回*(i)的值,得到常量,再入栈,再i自增,最后输出的值是*i的值

    2.关于float和double的判0

    float f 判0 abs(f)<1e-6

    double d 判0 abs(d)<1e-15

    3.结构体大小计算:

    1. 最后一个元素的偏移量+最后一个元素的大小
    2. 两个准则:偏移量必须为自身大小的整数倍
    3. 结构体大小必须为所有元素大小的证书倍
    4. 偏移量=上一个元素的偏移量+上一个元素的大小

    4.常量指针,指向常量的指针

    Static const char *d;

    常量指针和指向常量的指针(没有指针常量)

    拷贝构造函数等等

    1. 大端序和小端序

    一个地址位为:0x01-0x04

    从A-H为从高位到低位

    一个int 数据为0x12345678

    大端序:高字节存于内存低的地址:

    0x01 0x12

    0x02 0x34

    0x03 0x56

    0x04 0x78

    小端序:高字节存于内存高的地址:

    0x01 0x78

    0x02 0x56

    0x03 0x34

    0x04 0x12 

    通用多态=包含多态(虚函数)+参数多态(函数模板,类模板)

    特定多态=重载多态(函数重载)+强制多态(强制类型转换)

    delete[]和delete的区别

    delete仅仅调用一次析构函数,delete根据元素个数调用多次析构函数,如果是内置类型元素,因为不需要调用析构函数,所以无所谓,而如果是自定义类型,必须

  • 相关阅读:
    【Codeforces Round #240 (Div. 1) 】E—Mashmokh's Designed Problem(Spaly)
    【Codeforces Round #240 (Div. 1) 】E—Mashmokh's Designed Problem(Spaly)
    拦路虎
    拦路虎:jQuery
    图片百分百问题 z-index问题
    惠头无忧——浏览器兼容性
    响应式设计
    老子的第一篇博客
    less 学习 (计划终于执行了啊,不再拖延了)
    工作拦路虎
  • 原文地址:https://www.cnblogs.com/YTYMblog/p/6375723.html
Copyright © 2020-2023  润新知