- map 和 multimap 的区别
- map 插入 相同的key会忽略,想要修改的时候需要通过 下标修改
- mulimap 允许有相同的key. 因此不允许通过下标索引
- 底层都是红黑树,元素类型均是pair 键值对
- vector 和 list的区别
- vector:
- vector 底层实现是数组+size+capacity,动态扩容
- capacity为容量,而size表示大小
- 访问:O(1)
- 由于是连续存储的空间,空间不够的时候需要重新找一块内存存放,这个过程涉及到内存的申请及释放,以及内存的拷贝
- list:
- 插入、删除的操作的时间复杂度是O(1),但是寻找节点的时间复杂度为O(n)
- vector随机访问性能好,插入删除性能差、list随机访问性能差,插入删除性能好
- vector:
- const
- 修饰局部变量
- 修饰指针,存在指针常量和常量指针
- 修饰全局变量
- 布隆过滤器能快速确定一个数值在不在其中
- 多个哈希函数映射成多个值,然后将对应的位置为1即可
- 函数的参数顺序不一致也认为是重载
- 函数名相同
- 参数列表不同(个数、类型、排序)
- 返回值可以相同、可以不相同,无法依据返回值确定是不是重载
- 一个类构造函数的执行顺序为:
- 抽象类的构造函数
- 基类的构造函数
- 类的成员的构造函数
- 自己的构造函数
- 抽象类包含纯虚函数
- 抽象类本身并不提供纯虚函数的实现
- 抽象类的子类如果没有实现全部的虚函数,则该子类依旧是抽象类
- 抽象类不能生成实例
- 抽象类有一个默认的构造函数
- volatile关键字
- 没有volatile关键字,编译器可能会优化读取和存储
- extern
- 表示这个函数或者变量的声明在其他文件中
- 链接标识的作用,表示在编译时按照C的编译方式进行编译
- explict关键字
- 对类的构造函数中:只有一个参数,或者多个参数但是只有一个参数没有默认值定义了一种隐士转换规则
- 举个例子即可:A类中存在只有一个int型成员变量,初始化A的对象时可以在等号右边写value
- 关键字的作用是禁用这种隐式转换规则
