【C++】多种容器

在C++中,除了 std::vectorstd::list,标准库还提供了多种其他容器,它们各自基于不同的数据结构和设计目标。以下是常见容器的分类及特点:

一、序列容器(按顺序存储元素)

1. std::deque(双端队列)
  • 特性

    • 支持两端高效插入/删除(O(1))。
    • 随机访问效率较高(O(1)),但比 vector 略慢。
    • 内部由多个连续内存块组成,无需像 vector 那样频繁扩容。
  • 适用场景

    • 需要在头部和尾部同时进行插入/删除(如实现队列)。
    • 随机访问需求,但不希望像 vector 那样频繁扩容。
  • 示例

    std::deque<int> dq;
    dq.push_front(1);  // 头部插入
    dq.push_back(2);   // 尾部插入
    std::cout << dq[0];  // 随机访问
    
2. std::forward_list(单向链表)
  • 特性

    • 单链表结构,每个节点仅指向下一个节点。
    • list 更节省空间(每个节点只需一个指针)。
    • 只支持单向迭代,插入/删除操作效率与 list 类似。
  • 适用场景

    • 仅需单向遍历,且内存效率优先的场景。
    • 实现算法时需要单向链表结构(如哈希表的冲突链)。
  • 示例

    std::forward_list<int> fl;
    fl.push_front(1);  // 仅支持头部插入
    

二、关联容器(基于键值对存储,支持快速查找)

1. std::set / std::multiset
  • 特性

    • 基于红黑树实现,元素自动排序(默认升序)。
    • set 中元素唯一,multiset 允许重复元素。
    • 插入、删除、查找操作时间复杂度均为 O(log n)。
  • 适用场景

    • 需要自动去重并排序的场景。
    • 快速判断元素是否存在(如集合操作)。
    • <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值