std::array-数组

该结构适用于查、改操作;不适用于交换、删除、增加数据的操作;其性能、速度与原始数组相差无几。

常用函数

  1. begin()
  2. end()
  3. empty()
  4. front() //返回第一个元素值
  5. back() //返回最后一个元素值

std::list-双向链表

该结构适用任何地方插入和删除;随机访问比较慢。

常用函数

  1. back() //返回最后一个元素
  2. front() // 返回第一个元素
  3. begin() //返回指向第一个元素的迭代器
  4. end() //返回末尾的迭代器
  5. rbegin() //返回指向第一个元素的逆向迭代器
  6. rend() //指向list末尾的逆向迭代器
  7. pop_back() //删除最后一个元素
  8. pop_front() //删除第一个元素
  9. push_back() //在list的末尾添加一个元素
  10. push_front() //在list的头部添加一个元素
  11. empty()
  12. erase() //删除一个元素
  13. max_size() //返回list能容纳的最大元素数量
  14. merge() // 合并两个list
  15. remove() //从list删除元素
  16. resize() // 改变list的大小
  17. reverse() // 把list的元素倒转
  18. sort() // 给list排序
  19. splice() // 合并两个list
  20. swap() //交换两个list
  21. unique() //删除list中重复的元素

std::forward_list-前向链表

在链表的任何位置(除尾部不能插入和删除)进行插入/删除操作都非常快;只能从头到尾遍历,不能从尾部开始遍历(不提供size()成员函数;不支持反向迭代器,比如rbegin()等成员函数;不提供back()、push_back()和pop_back())。

常用函数

  1. push_front()
  2. pop_front()
  3. emplace_front() //头部添加元素
  4. front()
  5. empty()

std::queue-队列

该结构特点是先进先出;队尾添加数据,队头删除数据;不适用于查找数据。

常用函数

  1. push() //队尾添加元素
  2. pop() //删除队头元素
  3. front() //返回队头元素(非删除队头元素)
  4. back() //返回队尾元素(非删除队尾元素)

std::deque-双端队列

该结构是队头队尾都可以添加删除数据。

常用函数

  1. begin()
  2. end()
  3. size()
  4. resize()
  5. empty()
  6. at()
  7. front()
  8. back() //返回尾元素
  9. push_back() //尾部添加元素
  10. push_front() //首部添加元素
  11. pop_front() //尾部删除元素
  12. pop_front() //首部删除元素
  13. insert()
  14. erase() //删除元素
  15. swap() //交换两个容器的内容
  16. clear()
  17. emplace_front() //c++11首部添加元素
  18. emplace_back() //c++11尾部添加元素

std::priority_queue-优先队列

常用函数

  1. push()
  2. pop()
  3. top() //队头元素

std::vector-动态数组

该结构用于尾部插入和删除的情况;中间和头部插入比较麻烦。

常用函数

  1. push_back() //尾部插入
  2. pop_back() //删除尾部元素
  3. insert() //插入数据

std::stack-栈

该结构特点是后进先出。

常用函数

  1. size() //元素个数
  2. top() //返回栈顶元素
  3. pop() //删除栈顶元素
  4. push() //添加元素
  5. empty()

std::bitset-固定长度位序列的抽象

该结构是一种类似数组的结构,它的每一个元素只能是0或1,每个元素仅用1bit空间。

常用函数

  1. count() //计算bitset中1的个数
  2. size()
  3. test() //test(1) 检测bitset第一位是否为1
  4. any() //bitset中是否有1
  5. none() //bitset是否没有1
  6. all() //bitset是否全为1

std::map

该结构的内部是红黑树(具有对数据自动排序的功能);可以存储任意类型的数据,包括使用者自定义的数据类型;关键字(key),只能在map中出现一次,第二个称该关键字值(value)。

常用函数

  1. find() //若存在则返回该元素的迭代器,否则返回end()
  2. count() //返回指定元素出现的次数
  3. erase() //删除元素

std::multimap

该结构主要用于一个key值对应多个value的情况,即允许重复的元素。

常用函数

  1. clear()
  2. count() //返回一个元素出现的次数
  3. find() //查找元素
  4. erase() //删除元素
  5. insert() //插入元素
  6. swap() //交换multimap

std::unordered_map

该结构内部是哈希表(存储元素没有进行排序),根据key查找单个value时非常高效;查询单个key的时候效率比map高,但是要查询某一范围内的key值时比map效率低。

常用函数

  1. [] //操作符来访问key值对应的value值
  2. emplace() //插入元素
  3. insert()

std::unordered_multimap

std::set

该结构是关键字即值,即只保存关键字的容器。

常用函数

  1. begin(); // 返回指向第一个元素的迭代器
  2. end(); // 返回指向最后一个元素的迭代器
  3. clear(); // 清除所有元素
  4. count(); // 返回某个值元素的个数
  5. empty(); // 如果集合为空,返回true
  6. equal_range(); //返回集合中与给定值相等的上下限的两个迭代器
  7. erase() //删除集合中的元素
  8. find() //返回一个指向被查找到元素的迭代器
  9. get_allocator() //返回集合的分配器
  10. insert() //在集合中插入元素
  11. lower_bound() //返回指向大于(或等于)某值的第一个元素的迭代器
  12. key_comp() //返回一个用于元素间值比较的函数
  13. max_size() //返回集合能容纳的元素的最大限值
  14. rbegin() //返回指向集合中最后一个元素的反向迭代器
  15. rend() //返回指向集合中第一个元素的反向迭代器
  16. size() //集合中元素的数目
  17. swap() //交换两个集合变数
  18. upper_bound() //返回大于某个值元素的迭代器
  19. value_comp() //返回一个用于比较元素间的值的函数

std::multiset

std::unordered_set

std::unordered_multiset


boost::dynamic_bitset

vector<bool>可以动态增长,但不能方便地进行位运算;bitset可以方便的进行二进位位运算,但不能动态增长。dynamic_bitset提供丰富的位运算,同时长度动态可变。

常用函数

  1. resize() //调整容器大小
  2. test() //检测第n位是否为1
  3. any() //检测容器中是否有1
  4. none() //检测容器中是否没有1
  5. count() //检测容器中1的个数
  6. set() //置全部或特定位置为1或0
  7. reset() //置全部或特定位置为0
  8. flip() //反转全部或特定位置的值

boost::bimap

c++提供的映射型容器map和multi_map,把一个key映射到value,但是这种映射关系是单向的,不能反过来,bimap提供双向映射的能力;对于bimap<X,Y>存在左视图和右视图。bimap.left相当于map<X,Y>,bimap.right相当于map<Y,X>;key/value值对必须为唯一的,插入任何一个重复的都是无效的。

常用函数

bimap<int,int> bimap_;

  1. bimap.left.insert(make_pair(1,2)); //数据的插入

boost::circular_buffer-循环缓冲区

该结构支持标准的容器操作(pushback),但大小固定,当到达容器尾将自动重用最初的空间;实现了一个大小固定的循环队列,就像deque和stack的混合体,可以像普通双端队列那样执行pushback(),pushfront(),insert()等,也可像栈一样用pop_back(),pop_front()删除元素。

常用函数

  1. push_back()
  2. push_front()
  3. pop_back()
  4. pop_front()

boost::tuple

该结构是一个有固定数目元素的容器,每个元素类型可以不同;类似pair,只是里面的元素更多,可将pair可以看作tuple的特例,tuple是pair的泛化。

常用函数

  1. get<num>() //得到某个位置的值
  2. make_tuple()

boost::any

该结构只能容纳一个元素,但是这个元素可以是任意类型(int、float、string、stl容器、任何自定义类型)。

常用函数

  1. anycast<>() //any a(10); int n=any_cast<int>(a);

boost::variant

该结构是枚举类型,但其元素可以string、vector等复杂类型;与any的区别,variant是有界类型,元素类型范围由用户指定,any是无界类型,可以容纳任意的类型。

boost::multi_array-多维数组

该结构实现了stl风格的多维数组,比使用原始多维数组、vector<vector>更好。

boost::property_tree-树形数据结构

多个属性值的树形数据结构,可以类似路径的简单方式访问任意节点的属性,而每个节点都可以用类似stl的风格遍历子节点,特别适用于应用程序的配置数据处理,可以解析xml、ini、json、info四种格式的文本数据。

推荐阅读:

相关文章