C++标准库容器选择

C++标准库提供了多种容器,每种容器都有其自身的特点和适用场景。以下是C++标准库中常用的容器以及它们的特点:

  1. std::vector:动态数组,支持随机访问,适用于需要快速随机访问元素的场景。
  1. push_back():在数组末尾添加一个元素。
  2. pop_back():删除数组末尾的元素。
  3. size():返回数组中元素的数量。
  4. empty():检查数组是否为空。
  5. clear():清空数组中的所有元素。
  6. resize():改变数组的大小。
  7. reserve():预留空间以存储一定数量的元素,可以提高插入元素的效率。
  8. at():访问指定位置的元素,会进行边界检查。
  9. operator[]:访问指定位置的元素,不进行边界检查。
  10. front():返回数组中第一个元素。
  11. back():返回数组中最后一个元素。
  12. begin() / end():返回指向数组起始和结束位置的迭代器,可用于遍历数组元素。
  13. insert():在指定位置插入一个或多个元素。
  14. erase():删除指定位置的一个或多个元素。
  15. swap():交换两个vector的内容。
  16. emplace_back():在数组末尾直接构造一个元素,避免了拷贝构造。
  1. std::list:双向链表,支持快速插入和删除操作,适用于需要频繁插入和删除元素的场景。
  1. push_back():在链表末尾添加一个元素。
  2. push_front():在链表头部添加一个元素。
  3. pop_back():删除链表末尾的元素。
  4. pop_front():删除链表头部的元素。
  5. size():返回链表中元素的数量。
  6. empty():检查链表是否为空。
  7. clear():清空链表中的所有元素。
  8. begin() / end():返回指向链表起始和结束位置的迭代器,可用于遍历链表元素。
  9. insert():在指定位置插入一个或多个元素。
  10. erase():删除指定位置的一个或多个元素。
  11. splice():将另一个链表的元素移动到当前链表的指定位置。
  12. remove():删除链表中所有与给定值相等的元素。
  13. unique():删除链表中所有重复的元素。
  14. sort():对链表中的元素进行排序。
  15. reverse():反转链表中的元素顺序。
  1. std::deque:双端队列,支持在两端进行快速插入和删除操作,适用于需要在两端进行操作的场景。
  1. push_back():在双端队列尾部添加一个元素。
  2. push_front():在双端队列头部添加一个元素。
  3. pop_back():删除双端队列尾部的元素。
  4. pop_front():删除双端队列头部的元素。
  5. size():返回双端队列中元素的数量。
  6. empty():检查双端队列是否为空。
  7. clear():清空双端队列中的所有元素。
  8. begin() / end():返回指向双端队列起始和结束位置的迭代器,可用于遍历双端队列元素。
  9. insert():在指定位置插入一个或多个元素。
  10. erase():删除指定位置的一个或多个元素。
  11. at():访问指定位置的元素,会进行边界检查。
  12. operator[]:访问指定位置的元素,不进行边界检查。
  13. front():返回双端队列中第一个元素。
  14. back():返回双端队列中最后一个元素。
  15. resize():改变双端队列的大小。
  16. swap():交换两个deque的内容。
  1. std::map / std::unordered_map:关联容器,提供键值对的映射,std::map基于红黑树实现,保持键的有序性,std::unordered_map基于哈希表实现查找速度更快。
  1. insert():插入键值对。
  2. erase():删除指定键值对。
  3. find():查找指定键对应的值。
  4. count():统计指定键的出现次数(对于std::map,要么是0要么是1)。
  5. size():返回容器中键值对的数量。
  6. empty():检查容器是否为空。
  7. clear():清空容器中的所有键值对。
  8. operator[]:访问指定键对应的值,如果键不存在则插入一个具有默认值的键值对。
  9. at():访问指定键对应的值,会进行边界检查。
  10. emplace():在不重复键的情况下插入键值对。
  11. emplace_hint():在指定位置插入键值对。
  12. begin() / end():返回指向容器起始和结束位置的迭代器,可用于遍历键值对。
  1. std::set / std::unordered_set:集合容器,存储唯一元素,std::set基于红黑树实现,std::unordered_set基于哈希表实现。
  1. insert():向集合中插入元素。
  2. erase():从集合中删除指定元素。
  3. find():查找集合中是否存在指定元素。
  4. count():计算集合中指定元素的个数(对于set,要么是0要么是1)。
  5. size():返回集合中元素的数量。
  6. empty():检查集合是否为空。
  7. clear():清空集合中的所有元素。
  8. begin() / end():返回指向集合起始和结束位置的迭代器,可用于遍历集合元素。
    std::set常用API:
  9. lower_bound() / upper_bound():返回指向大于等于/大于某个值的第一个元素的迭代器。
  10. equal_range():返回指定值的范围。
    std::unordered_set常用API:
  11. bucket_count():返回当前桶的数量。
  12. load_factor():返回当前负载因子。
  1. std::stack:栈,后进先出的数据结构,适用于需要后进先出操作的场景。
  1. push():将元素压入栈顶。
  2. pop():弹出栈顶元素。
  3. top():访问栈顶元素。
  4. empty():检查栈是否为空。
  5. size():返回栈中元素的数量。
  1. std::queue:队列,先进先出的数据结构,适用于需要先进先出操作的场景。
  1. push():将元素加入队尾。
  2. pop():移除队首元素。
  3. front():访问队首元素。
  4. back():访问队尾元素。
  5. empty():检查队列是否为空。
  6. size():返回队列中元素的数量。
  1. std::priority_queue:优先队列,基于堆实现,支持按优先级获取元素。
  1. push():将元素加入优先队列。
  2. pop():移除优先队列顶部(最大或最小值)元素。
  3. top():访问优先队列顶部(最大或最小值)元素。
  4. empty():检查优先队列是否为空。
  5. size():返回优先队列中元素的数量。
posted @ 2024-03-21 10:57  flxx  阅读(24)  评论(0编辑  收藏  举报