博客
关于我
【4】STL容器之 list vector deque map set 容器的异同点
阅读量:167 次
发布时间:2019-02-28

本文共 1732 字,大约阅读时间需要 5 分钟。

list容器的特点

list是一种序列式容器,其实现方式类似于双向链表。list的每个节点包含三个域:前驱指针、数据域和后继指针。由于其基于链表结构,list的插入和删除操作可以在任意位置高效完成。然而,list不支持随机存取操作,迭代访问必须通过“++”或“--”操作完成。此外,list的内存空间是不连续的,整体效率在插入和删除方面优于vector,但在随机存取方面则不如deque。

list vs vector vs deque的比较

vector

vector类似于内置的数组,具有连续内存空间,支持高效的随机存取操作(通过[]操作符)。然而,vector的插入和删除操作在中间位置会导致内存拷贝,影响其效率。尽管如此,vector因其高效的随机存取性能,仍是最常用的容器之一。

list

list基于双向链表结构,内存空间不连续,通过指针连接节点。list支持在任意位置插入和删除,但由于其链表特性,随机存取效率低,且没有[]操作符。list的优点在于插入和删除效率高,适合频繁操作数据的场景。

deque

deque是双端队列,支持在两端进行插入和删除,同时也支持随机存取操作。deque的实现结合了vector和list的优点,既能高效进行随机存取,又能在两端进行快速操作。

如何选择容器

选择list、vector或deque应根据具体需求:

  • 如果需要高效的随机存取且对插入删除操作不敏感,选择vector。
  • 如果需要频繁插入删除操作,选择list。
  • 如果需要两端操作且需要随机存取,选择deque。
  • list的具体使用方法

    构造函数

    • list<int> c0; 创建空链表。
    • list<int> c1(3); 创建长度为3的链表,元素初始化为0。
    • list<int> c2(5, 2); 创建长度为5的链表,元素为2。
    • list<int> c4(c2); 创建c2的副本。
    • list<int> c5(c1.begin(), c1.end()); 创建包含c1所有元素的链表副本。

    成员函数

    • c.begin() 返回指向链表第一个元素的迭代器。
    • c.end() 返回指向链表最后一个元素的迭代器。
    • c.front() 返回第一个元素。
    • c.back() 返回最后一个元素。
    • push_back() 从末尾插入元素。
    • push_front() 从开头插入元素。
    • pop_back() 删除最后一个元素。
    • pop_front() 删除第一个元素。
    • erase() 删除单个或多个元素(有重载)。
    • empty() 判断链表是否为空。
    • resize(n) 调整链表长度为n,超出部分删除。
    • clear() 清空链表。
    • swap() 交换两个链表。
    • merge() 合并两个链表并排序。

    迭代器访问

    #include 
    #include
    #include
    int main() { std::vector
    myvector; for (size_t i = 0; i < 5; ++i) { myvector.push_back(i); } // 正向迭代 auto ibegin = myvector.begin(); auto iend = myvector.end(); for (ibegin; ibegin != iend; ++ibegin) { std::cout << *ibegin << std::endl; } // 反向迭代 auto rbegin = myvector.rbegin(); auto rend = myvector.rend(); for (rbegin; rbegin != rend; ++rbegin) { std::cout << *rbegin << std::endl; } return 0;}

    上述代码展示了如何使用迭代器对vector进行正向和反向遍历。

    转载地址:http://inxc.baihongyu.com/

    你可能感兴趣的文章
    openlayers 入门教程(十三):动画
    查看>>
    openlayers 入门教程(十五):与 canvas、echart,turf 等交互
    查看>>
    openlayers 入门教程(十四):第三方插件
    查看>>
    openlayers 入门教程(四):layers 篇
    查看>>
    OpenLayers 项目分析(三)-OpenLayers中定制JavaScript内置类
    查看>>
    Openlayers中使用Cluster实现点位元素重合时动态聚合与取消聚合
    查看>>
    Openlayers中使用Cluster实现缩放地图时图层聚合与取消聚合
    查看>>
    Openlayers中使用Image的rotation实现车辆定位导航带转角(判断车辆图片旋转角度)
    查看>>
    Openlayers中加载Geoserver切割的EPSG:900913离线瓦片图层组
    查看>>
    Openlayers中将某个feature置于最上层
    查看>>
    Openlayers中点击地图获取坐标并输出
    查看>>
    Openlayers中设置定时绘制和清理直线图层
    查看>>
    Openlayers图文版实战,vue项目从0到1做基础配置
    查看>>
    Openlayers实战:modifystart、modifyend互动示例
    查看>>
    Openlayers实战:判断共享单车是否在电子围栏内
    查看>>
    Openlayers实战:绘制图形,导出geojson文件
    查看>>
    Openlayers实战:绘制图形,导出KML文件
    查看>>
    Openlayers实战:绘制多边形,导出CSV文件
    查看>>
    Openlayers实战:输入WKT数据,输出GML、Polyline、GeoJSON格式数据
    查看>>
    Openlayers高级交互(10/20):绘制矩形,截取对应部分的地图并保存
    查看>>