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

    你可能感兴趣的文章
    OfficeWeb365 SaveDraw 文件上传漏洞复现
    查看>>
    office中的所有content type
    查看>>
    office之Excel 你会用 Ctrl + E 吗?
    查看>>
    Office办公软件里的“开发工具”选项卡-ChatGPT4o作答
    查看>>
    Offline Installation the .NET Framework 3.5 on Windows 8
    查看>>
    OGG初始化之使用数据库实用程序加载数据
    查看>>
    ogg参数解析
    查看>>
    ognl详解
    查看>>
    Ogre 插件系统
    查看>>
    Oil Deposits
    查看>>
    oj2894(贝尔曼福特模板)
    查看>>
    OJ4TH|Let's play a game
    查看>>
    OJ中处理超大数据的方法
    查看>>
    OJ中常见的一种presentation error解决方法
    查看>>
    OK335xS UART device registe hacking
    查看>>
    ok6410内存初始化
    查看>>
    OkDeepLink 使用教程
    查看>>
    OKHTTP
    查看>>
    Okhttp3添加拦截器后,报错,java.io.IOException: unexpected end of stream on okhttp3.Address
    查看>>
    Okhttp拦截器
    查看>>