- 一:C/C++基础
- struct与class的区别 :
-
相同点:都可以包含成员函数、都可以继承、都可以实现多态
不同点:struct是数据结构的实现体默认的访问权限是public,class是对象的实现体默认的访问权限是private
Struct不可以用作定义模板参数,class可以用作定义参数模板
- STL库的介绍 :
-
STL:标准模板库,体现了泛型化编程思想,泛型也是一种软件复用技术:需求、概念、模型、容器、算法、迭代子 .从根本上来说,STL是一些容器(list、map、set、map等)、算法和迭代器的集合
STL组件共分为6类:
- Container(容器)-------各种基本数据结构
- Adapyer(适配器)-------可改变Containers、Iterators、Function object接口的一种组件
- Algroithm(算法)-------各种基本算法如sort、search。。。等
- Iterator(迭代器)------连接containers和algorithms
- Function object(函数对象)
- Allocator(分配器)
- STL内存分配 :小型区块所可能造成的内存碎片问题,STL设置了双层级配置器
-
>128字节调用:一级配置器
<128字节调用:二级配置器
- 顺序容器
- vector:
- O(1)时间的快速访问
- 插入或删除到非尾结点位置所需时间时间复杂度O(n),在尾增加或删除元素所需要时间为O(1)
- 扩容规则:重新申请一个2倍大的内存空间;将原先空间内容拷贝过来,将原内容释放,将内存交给操作系统。
-
新建一个vector时,会给它分配一个连续的内存空间,如std::vector<int> vec,当通过push_back向其中加入元素时,如果初始分配空间已满,就会引起vector扩容。
- 注意事项:vector在插入、删除、扩容之后,都会引起迭代器的失效。
- 底层数据结构:数组,特点是连续存储、支持快速访问
- 建议:使用vector时,用reserve()成员函数预先分配需要的内存空间,它既可以保护迭代器使之不会失效,又可以提高运行效率
- deque:
- 随机访问每个元素,所需要的时间为O(1)