如何设置网站名字,哈尔滨市建设工程信息网官方网站,哪个网站是专门做装修的,网站怎么做支付宝支付接口表格汇总#xff1a;
容器存储结构随机访问性能中间插入/删除性能两端插入/删除性能内存管理特点迭代器类型适用场景vector连续存储的动态数组 O ( 1 ) O(1) O(1) O ( n ) O(n) O(n)#xff08;需要移动元素#xff09;末尾#xff1a; O ( 1 ) O(1) O(1)#xff0c;头部…表格汇总
容器存储结构随机访问性能中间插入/删除性能两端插入/删除性能内存管理特点迭代器类型适用场景vector连续存储的动态数组 O ( 1 ) O(1) O(1) O ( n ) O(n) O(n)需要移动元素末尾 O ( 1 ) O(1) O(1)头部 O ( n ) O(n) O(n)空间不足时重新分配并复制元素随机访问迭代器频繁随机访问插入/删除在末尾deque分段连续存储 O ( 1 ) O(1) O(1)稍逊于 vector O ( n ) O(n) O(n)优于 vector O ( 1 ) O(1) O(1)以块为单位分配内存空间扩展更稳定随机访问迭代器两端高效插入/删除需一定随机访问list双向链表节点存储元素及前后指针 O ( n ) O(n) O(n)需遍历 O ( 1 ) O(1) O(1)仅需修改指针 O ( 1 ) O(1) O(1)元素节点单独分配可能碎片化双向迭代器频繁中间插入/删除不依赖随机访问
存储结构 vector 是一个动态数组元素在内存中是连续存储的。这使得它可以像数组一样支持快速的随机访问通过下标访问元素的时间复杂度为 O ( 1 ) O(1) O(1)。例如对于一个 std::vectorint v;使用 v[2] 可以快速访问第三个元素索引从 0 开始。 deque双端队列 数据在内存中是分段连续存储的对用户而言逻辑上是连续的。它也支持随机访问不过效率比 vector 稍低但仍为 O ( 1 ) O(1) O(1)。例如对于 std::dequeint d;可以使用 d[3] 来访问第四个元素。 list双向链表 是一个双向链表每个元素存储在一个节点中节点包含数据和指向前一个及后一个节点的指针。这导致它不能直接根据下标进行随机访问访问元素需要从头部或尾部开始遍历时间复杂度为 O ( n ) O(n) O(n)其中 n 是元素的个数。 插入和删除元素的性能 vector 在末尾插入和删除元素通常比较快时间复杂度为 O ( 1 ) O(1) O(1)但当元素数量达到容器的容量时插入元素会触发扩容操作需要重新分配内存和复制元素性能开销较大。在中间插入或删除元素时需要移动其后的元素时间复杂度为 O ( n ) O(n) O(n)。例如v.insert(v.begin() 2, 5); 会将元素 5 插入到 v 的第三个位置其后的元素会向后移动。 deque 在两端插入和删除元素都非常快时间复杂度为 O ( 1 ) O(1) O(1)。在中间插入或删除元素时性能比 vector 好因为不需要移动大量元素但仍然比 list 慢时间复杂度为 O ( n ) O(n) O(n)。例如d.push_front(1); 和 d.push_back(2); 分别在 deque 的前端和后端插入元素。 list 在任何位置插入和删除元素都很快只要有指向该位置的迭代器时间复杂度为 O ( 1 ) O(1) O(1)因为只需要修改前后节点的指针不涉及元素的移动。例如对于 std::listint l;使用 l.insert(l.begin(), 3); 插入元素 3 时只需调整指针。 内存管理 vector 当空间不足时会分配一个更大的连续内存空间将原元素复制过去释放原空间。这可能导致性能开销和内存浪费预留但未使用的空间。例如当 v 的元素数量超过其容量时会重新分配更大的内存空间。 deque 以块为单位分配内存当需要更多空间时会分配新的块不需要像 vector 那样大规模复制元素因此在空间扩展时相对更稳定。 list 每个元素节点单独分配内存插入元素时为新节点分配内存不会出现 vector 那样的整体复制和重新分配问题但可能导致内存碎片化因为节点是分散存储的。 迭代器特性 vector 迭代器是随机访问迭代器可以进行加、减操作支持 operator[]。在插入或删除元素时可能导致迭代器失效特别是在扩容时迭代器和指针、引用都可能失效。 deque 迭代器是随机访问迭代器但在中间插入或删除元素时部分迭代器可能失效因为存储是分段的。 list 迭代器是双向迭代器只能进行前后移动不支持 operator[]。在插入或删除元素时只有被操作元素的迭代器失效其他迭代器不受影响。 适用场景 vector 适合需要频繁随机访问元素并且元素的插入和删除操作主要在末尾进行的场景。例如存储一组学生成绩经常根据索引查询成绩成绩的添加和删除多在末尾。 deque 适用于需要在两端高效插入和删除元素同时也需要一定程度随机访问能力的情况。例如实现一个双端操作的队列或者一个窗口滑动的数据结构。 list 适用于需要频繁在容器中间插入和删除元素对随机访问性能要求不高的情况。例如实现一个文本编辑器中的文本行存储频繁插入和删除行操作。