C++标准库容器选择
C++标准库提供了多种容器,每种容器都有其自身的特点和适用场景。以下是C++标准库中常用的容器以及它们的特点:
- std::vector:动态数组,支持随机访问,适用于需要快速随机访问元素的场景。
- push_back():在数组末尾添加一个元素。
- pop_back():删除数组末尾的元素。
- size():返回数组中元素的数量。
- empty():检查数组是否为空。
- clear():清空数组中的所有元素。
- resize():改变数组的大小。
- reserve():预留空间以存储一定数量的元素,可以提高插入元素的效率。
- at():访问指定位置的元素,会进行边界检查。
- operator[]:访问指定位置的元素,不进行边界检查。
- front():返回数组中第一个元素。
- back():返回数组中最后一个元素。
- begin() / end():返回指向数组起始和结束位置的迭代器,可用于遍历数组元素。
- insert():在指定位置插入一个或多个元素。
- erase():删除指定位置的一个或多个元素。
- swap():交换两个vector的内容。
- emplace_back():在数组末尾直接构造一个元素,避免了拷贝构造。
- std::list:双向链表,支持快速插入和删除操作,适用于需要频繁插入和删除元素的场景。
- push_back():在链表末尾添加一个元素。
- push_front():在链表头部添加一个元素。
- pop_back():删除链表末尾的元素。
- pop_front():删除链表头部的元素。
- size():返回链表中元素的数量。
- empty():检查链表是否为空。
- clear():清空链表中的所有元素。
- begin() / end():返回指向链表起始和结束位置的迭代器,可用于遍历链表元素。
- insert():在指定位置插入一个或多个元素。
- erase():删除指定位置的一个或多个元素。
- splice():将另一个链表的元素移动到当前链表的指定位置。
- remove():删除链表中所有与给定值相等的元素。
- unique():删除链表中所有重复的元素。
- sort():对链表中的元素进行排序。
- reverse():反转链表中的元素顺序。
- std::deque:双端队列,支持在两端进行快速插入和删除操作,适用于需要在两端进行操作的场景。
- push_back():在双端队列尾部添加一个元素。
- push_front():在双端队列头部添加一个元素。
- pop_back():删除双端队列尾部的元素。
- pop_front():删除双端队列头部的元素。
- size():返回双端队列中元素的数量。
- empty():检查双端队列是否为空。
- clear():清空双端队列中的所有元素。
- begin() / end():返回指向双端队列起始和结束位置的迭代器,可用于遍历双端队列元素。
- insert():在指定位置插入一个或多个元素。
- erase():删除指定位置的一个或多个元素。
- at():访问指定位置的元素,会进行边界检查。
- operator[]:访问指定位置的元素,不进行边界检查。
- front():返回双端队列中第一个元素。
- back():返回双端队列中最后一个元素。
- resize():改变双端队列的大小。
- swap():交换两个deque的内容。
- std::map / std::unordered_map:关联容器,提供键值对的映射,std::map基于红黑树实现,保持键的有序性,std::unordered_map基于哈希表实现查找速度更快。
- insert():插入键值对。
- erase():删除指定键值对。
- find():查找指定键对应的值。
- count():统计指定键的出现次数(对于std::map,要么是0要么是1)。
- size():返回容器中键值对的数量。
- empty():检查容器是否为空。
- clear():清空容器中的所有键值对。
- operator[]:访问指定键对应的值,如果键不存在则插入一个具有默认值的键值对。
- at():访问指定键对应的值,会进行边界检查。
- emplace():在不重复键的情况下插入键值对。
- emplace_hint():在指定位置插入键值对。
- begin() / end():返回指向容器起始和结束位置的迭代器,可用于遍历键值对。
- std::set / std::unordered_set:集合容器,存储唯一元素,std::set基于红黑树实现,std::unordered_set基于哈希表实现。
- insert():向集合中插入元素。
- erase():从集合中删除指定元素。
- find():查找集合中是否存在指定元素。
- count():计算集合中指定元素的个数(对于set,要么是0要么是1)。
- size():返回集合中元素的数量。
- empty():检查集合是否为空。
- clear():清空集合中的所有元素。
- begin() / end():返回指向集合起始和结束位置的迭代器,可用于遍历集合元素。
std::set常用API:- lower_bound() / upper_bound():返回指向大于等于/大于某个值的第一个元素的迭代器。
- equal_range():返回指定值的范围。
std::unordered_set常用API:- bucket_count():返回当前桶的数量。
- load_factor():返回当前负载因子。
- std::stack:栈,后进先出的数据结构,适用于需要后进先出操作的场景。
- push():将元素压入栈顶。
- pop():弹出栈顶元素。
- top():访问栈顶元素。
- empty():检查栈是否为空。
- size():返回栈中元素的数量。
- std::queue:队列,先进先出的数据结构,适用于需要先进先出操作的场景。
- push():将元素加入队尾。
- pop():移除队首元素。
- front():访问队首元素。
- back():访问队尾元素。
- empty():检查队列是否为空。
- size():返回队列中元素的数量。
- std::priority_queue:优先队列,基于堆实现,支持按优先级获取元素。
- push():将元素加入优先队列。
- pop():移除优先队列顶部(最大或最小值)元素。
- top():访问优先队列顶部(最大或最小值)元素。
- empty():检查优先队列是否为空。
- size():返回优先队列中元素的数量。
本文来自博客园,作者:flxx,转载请注明原文链接:https://www.cnblogs.com/faithlocus/p/18086858