博客
关于我
【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/

    你可能感兴趣的文章
    python在gpu上运行_【python】python开启GPU加速
    查看>>
    Python在def函数中使用for循环
    查看>>
    Python在def函数中使用for循环
    查看>>
    Python在Conda环境中,但在Windows虚拟环境中没有激活
    查看>>
    python系列【仅供参考】:python pip 错误 ModuleNotFoundError: No module named pip._internal 解决办法
    查看>>
    python图像条状状噪声,使用PYTHON PIL从验证码图像中删除背景嘈杂的线条
    查看>>
    Python图像处理:从内存加载jpeg
    查看>>
    python固定后缀(名物化词汇)词频统计:抽取+统计+可视化
    查看>>
    python商品评论数据采集与分析可视化系统 Flask框架 requests爬虫 NLP情感分析 毕业设计 源码
    查看>>
    python商品数据分析可视化系统(带爬虫)京东销售数据分析 计算机毕业设计 源码下载
    查看>>
    python商品库存管理系统 django框架 商品网站 MySQL数据库 源码下载 计算机毕业设计
    查看>>
    Python哪个版本最稳定好用2023.10.19
    查看>>
    Python和黑客技术的渊源
    查看>>
    Python和RF编写接口自动化
    查看>>
    Python和RF编写web自动化
    查看>>
    python和js哪个难_【Python】记一次学习,Python 与 js 在实现闭包时的差异
    查看>>
    python和java哪个更值得学——来自知乎高赞回答
    查看>>
    python和c混合编程 github_在pycharm中使用git版本管理以及同步github的方法
    查看>>
    python命名空间更改_Python模块xml.etree.ElementTree自动修改xml命名空间键
    查看>>
    Python命名中尾随下划线有什么好处?
    查看>>