其他分享
首页 > 其他分享> > 面试问题整理

面试问题整理

作者:互联网

项目相关 项目中用到的C++技术栈

1.vector扩容机制(扩容用到的STL器件?没答出来)

      1) 新增元素:vector 通过一个连续的数组存放元素,如果集合已满,在新增数据的时候,就要分配一块更大的内存,将原来的数据复制过来,释放之前的内存,在插入新增的元素;

    2) 对vector 的任何操作,一旦引起空间重新配置,指向原vector 的所有迭代器就都失效了;

    3) 初始时刻vector 的capacity 为0,塞入第一个元素后capacity 增加为1;

    4) 不同的编译器实现的扩容方式不一样,VS2015 中以1.5 倍扩容,GCC 以2 倍扩容。对比可以发现采用采用成倍方式扩容,可以保证常数的时间复杂度,而增加指定大小的容量只能达到O(n)的时间复杂度,因此,使用成倍的方式扩容。 

2.讲讲static关键字

  1. 静态函数
    • 在函数返回类型前加static,函数就定义为静态函数。函数的定义和声明在默认情况下都是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。
    • 函数的实现使用static修饰,那么这个函数只可在本cpp内使用,不会同其他cpp中的同名函数引起冲突;
    • warning:不要再头文件中声明static的全局函数,不要在cpp内声明非static的全局函数,如果你要在多个cpp中复用该函数,就把它的声明提到头文件里去,否则cpp内部声明需加上static修饰;
  2. 类的静态成员
    • 在类中,静态成员可以实现多个对象之间的数据共享,并且使用静态数据成员还不会破坏隐藏的原则,即保证了安全性。
    • 因此,静态成员是类的所有对象中共享的成员,而不是某个对象的成员。对多个对象来说,静态数据成员只存储一处,供所有对象共用
  3. 类的静态函数
    • 静态成员函数和静态数据成员一样,它们都属于类的静态成员,它们都不是对象成员。因此,对静态成员的引用不需要用对象名。
    • 在静态成员函数的实现中不能直接引用类中说明的非静态成员,可以引用类中说明的静态成员(这点非常重要)。*如果静态成员函数中要引用非静态成员时,可通过对象来引用。从中可看出,调用静态成员函数使用如下格式:::();*参数表>静态成员函数名>类名>
    • 不能被virtual修饰,静态成员函数没有this 指针,虚函数的实现是为每一个对象分配一个vptr 指针,而vptr 是通过this 指针调用的,所以不能为virtual;虚函数的调用关系,this->vptr->ctable->virtual function

3.C++ STL容器和区别 迭代器


4.智能指针,shared_ptr 怎么解决其线程安全问题(weak_ptr)

5.程序从源代码到可执行文件的过程

6.防止内存泄露的方法

使用智能指针

7.C和C++申请动态内存的方法和不同

 

8.C++内存空间

9.数组和链表的区别

10.C++多态的几种方式

理解的虚函数和多态

11.基类析构函数可以声明为虚函数吗 

 

标签:扩容,函数,静态,成员,问题,面试,整理,数据结构,底层
来源: https://www.cnblogs.com/lhclqslove/p/16518948.html