vector常用接口
发布日期:2021-05-07 11:08:48 浏览次数:20 分类:精选文章

本文共 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时,需要注意以下几点:

  • 范围for会自动生成迭代器,确保遍历完成后迭代器被删除。
  • 遍历时不会修改vector的元素,因此可以安全地在遍历时修改其他容器。
  • 遍历时不会改变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提供了灵活的容器操作,同时在性能上也做了较好的优化。

    上一篇:数组题——壹
    下一篇:进程间的通信

    发表评论

    最新留言

    第一次来,支持一个
    [***.219.124.196]2025年04月11日 19时04分39秒