zoukankan      html  css  js  c++  java
  • 笔试面试之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根据元素个数调用多次析构函数,如果是内置类型元素,因为不需要调用析构函数,所以无所谓,而如果是自定义类型,必须

  • 相关阅读:
    UVa 116 单向TSP(多段图最短路)
    POJ 1328 Radar Installation(贪心)
    POJ 1260 Pearls
    POJ 1836 Alignment
    POJ 3267 The Cow Lexicon
    UVa 1620 懒惰的苏珊(逆序数)
    POJ 1018 Communication System(DP)
    UVa 1347 旅行
    UVa 437 巴比伦塔
    UVa 1025 城市里的间谍
  • 原文地址:https://www.cnblogs.com/YTYMblog/p/6375723.html
Copyright © 2011-2022 走看看