发布时间:2022-12-14 文章分类:编程知识 投稿人:李佳 字号: 默认 | | 超大 打印

底层数据结构:动态开辟的数组,每次以原始空间2倍扩容

vector vec;
增加
vec.push_back(100);容器末尾加元素 时间负责度O(1) 可能导致容器扩容
容器中的,对象的构造析构,内存的开辟释放,通过什么来实现?
容器的空间配置器allocator
allocate
deallocate
construct
destory

vec.insert(iterator,20);在迭代器指定位置插入元素,花费的时间和需要移动的元素个数有关O(N),可能导致容器扩容

删除
vec.pop_back();末尾删除元素 O(1)
vec.erase(iterator);删除迭代器指定的位置的元素, 花费的时间和需要移动的元素个数有关O(N)

查询

operator[] 可以通过数组下标实现随机访问 vec[5] 时间发给O(1);
iterator迭代器进行遍历
find , for_each , foreach=>iterator

注意:对容器进行连续的插入或删除操作,insert/erase,一定要更新迭代器,否则第一次
insert或erase完后,迭代器就失效了.

常用方法介绍
size();返回有效元素个数
empty();是否为空
reserve(20) 给verctor预留空间,只给容器底层开辟指定大小的内存空间,并不会添加新的元素.
resize(20):容器扩容用的,不仅给容器底层开辟指定大小的内存空间,还会添加元素
swap: 两个容器进行元素交换

vector vec;//0->1->2->4->8->16->32->64
vec.reserve(20) ;//预留内存空间,没有添加元素

当我们预先知道元素个数时,可以避免扩容带来效率上的降低