
本文共 1416 字,大约阅读时间需要 4 分钟。
vector介绍
1.vector介绍
vector是C++中一个非常常用的容器类型,主要特点是其大小可以动态改变,并且支持高效的元素插入、删除操作。
大小可变性:vector表示一个大小可以改变的容器,其容量可以动态增加或减少,与数组类似,但其大小的变化是动态管理的。
内存管理:vector从本质上说是一个动态分配数组,插入或删除元素时会重新分配内存空间。这种方式虽然灵活,但内存分配和释放操作的时间复杂度较高。
空间分配策略:vector在分配空间时会预留一定的额外空间,以应对元素增长时的需求。不同库实现的细节可能有所不同,但尾插操作的时间复杂度通常是常数时间。
插入和删除效率:vector对尾插入和尾删除操作的支持非常高效,而对中间位置的插入和删除操作则效率较低。
适用场景:由于vector的插入和删除操作对中间位置的元素操作效率较低,因此在需要频繁进行头插或尾插操作的场景中,通常不推荐使用vector,而是更适合使用list。
2.构造函数
vector类提供了多种构造函数,满足不同使用场景的需求。
默认构造函数:最简单的构造函数,直接创建一个空的vector。
半缺省构造函数:允许用户指定初始容量或元素。
拷贝构造函数:通过另一个vector来拷贝元素。
迭代器构造函数:通过一个迭代器初始化vector的内容。
3.元素访问方式
3.1 [下标]访问和迭代器访问
vector支持通过下标直接访问元素,也支持通过迭代器进行逐个遍历。
- 下标访问:通过vector的[]运算符直接访问特定位置的元素。
- 迭代器访问:使用vector提供的迭代器来逐个遍历元素。
3.2 范围for的注意事项
在使用范围for遍历vector时,需要注意以下几点:
4.容器接口
vector类提供了一系列接口和方法来管理容器的大小和元素操作。
4.1 max_size
判断当前内存可以存储的最大元素数量。
4.2 size、capacity、reserve、resize
- size:返回当前元素数量。
- capacity:返回当前分配的最大容量。
- reserve:预留额外空间,提升容量但不改变元素数量。
- resize:根据指定的大小调整vector的大小,若大小大于当前size,会自动扩展;若小于,会删除多余的元素。
4.3 []访问
通过下标访问元素,vector支持常数时间的随机访问。
4.4 swap
交换vector中的元素,可以使用标准库的swap函数。
4.5 push_back和pop_back
- push_back:尾插入元素,时间复杂度为常数时间。
- pop_back:尾删除元素,时间复杂度为常数时间。
4.6 insert和erase
- insert:在指定位置插入元素,时间复杂度较高,通常不推荐使用。
- erase:删除指定位置的元素,时间复杂度较高。
4.7 迭代器失效
在使用迭代器时,需要确保迭代器在操作完成后被正确释放,否则可能导致指向无效数据。
4.8 find
vector没有直接的find接口,通常通过算法中的find函数来查找元素。
通过这些接口和方法,vector提供了灵活的容器操作,同时在性能上也做了较好的优化。
发表评论
最新留言
关于作者
