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

本文共 1750 字,大约阅读时间需要 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/

    你可能感兴趣的文章
    Objective-C实现TCP拥塞控制(附完整源码)
    查看>>
    Objective-C实现tcp网络通讯服务器+客户端(附完整源码)
    查看>>
    Objective-C实现Tenengrad梯度函数(附完整源码)
    查看>>
    Objective-C实现ternary search三元搜索算法(附完整源码)
    查看>>
    Objective-C实现TernarySearch三分查找算法(附完整源码)
    查看>>
    Objective-C实现The Game of Life 生命游戏算法(附完整源码)
    查看>>
    Objective-C实现tim sort排序算法(附完整源码)
    查看>>
    Objective-C实现Timsort算法(附完整源码)
    查看>>
    Objective-C实现TOPK算法(附完整源码)
    查看>>
    Objective-C实现topological sort拓扑排序算法(附完整源码)
    查看>>
    Objective-C实现topologicalSort拓扑排序算法(附完整源码)
    查看>>
    Objective-C实现tower of hanoi河内塔算法(附完整源码)
    查看>>
    Objective-C实现trapezoidal rule梯形法则算法(附完整源码)
    查看>>
    Objective-C实现Trapping Rain Water捕获雨水问题算法(附完整源码)
    查看>>
    Objective-C实现Travelling Salesman算法(附完整源码)
    查看>>
    Objective-C实现tree sort树排序算法(附完整源码)
    查看>>
    Objective-C实现UDP内网穿透(附完整源码)
    查看>>
    Objective-C实现ugly numbers丑数算法(附完整源码)
    查看>>
    Objective-C实现wc函数功能(附完整源码)
    查看>>
    Objective-C实现weight conversion权重转换算法(附完整源码)
    查看>>