https://www.androidperformance.com/2018/05/07/Android-performance-optimization-skills-and-tools/
全部先参考此链接:https://www.cnblogs.com/inception6-lxc/p/8686156.html
1.vector : 因为vector使用数组实现的,因此元素是保存在连续的内存中的,所以通过索引取值的速度非常快
size的大小:结束的数据-开始的数据
capacity的大小:申请一块连续的内存大小
2.resize()、reserve()两个函数对比
resize : 影响的存储的数据的大小,也有可能影响capacity这个大小,因为size长度比capacity的长度大,这个时候就需要扩容
reserve:它只影响capacity的大小,不会影响size的大小
扩容时候会把之前旧数据拷贝到新的数据里面,然后再把老的数据清除掉
3. list : 在底层使用一个双向的环形链表实现的,所以在任意位置进行增加或者删除速度都比较快,都是指针交换
4.Map、Multimap、Unordered_map、Unordered_multimap
Map和Multimap:底层基于红黑树,元素自动有序,且插入、删除效率高,时间复杂度是O(logN)
Unordered_map和Unordered_multimap : 底层基于哈希表,故元素无序,查找效率高,时间复杂度是O(1)
5.迭代器和指针的区别
迭代器:有个迭代器模式,对指针里面的功能进行一系列封装的指针,它是一个类模版。迭代器的类型有:
指针:它是一个存放对象的地址的指针变量。
6.类模版 :template作为关键字
7.友元函数,需要用friend来作为定义
类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。
8.指针和引用的区别
引用被创建的同时必须被初始化 指针则可以在任何时候被初始化
不能有NULL 引用,引用必须与合法的存储单元关联 指针则可以是NULL
一旦引用被初始化,就不能改变引用的关系 指针则可以随时改变所指的对象
引用有编译检查 指针无编译检查
9.虚函数用sizeof来看大小
虚函数用sizeof大小是4,虚函数指针的大小是4,指针用sizeof去计算大小都是4
10.虚函数和纯虚函的区别
虚函数:它是一个继承,子类不一定需要实现,继承只能实现一个
纯虚函数:它是一个接口,子类必须实现,它是在方法后面加个=0,接口可以实现多实现
什么情况下需要将析构函数定义为虚函数?
当一个类里面有虚函数时候,继承之后就会调用该方法,这样会导致内存泄漏,才必须再析构函数加virtual这个关键字