<c++>—STL容器

114 阅读2分钟

deque

数据存储

  1. 使用map来存储数据,map为一个指向指针的指针。
  2. 所指向的指针为node(缓冲区)。
  3. 迭代器要维护start和finish两个迭代器,start指向第一个缓冲区(也即map中第一个node)的第一个元素,finish指向最后一个缓冲区的最后一个元素。
  4. 迭代器具有四个属性:cur,first,last,node

常用成员函数

  1. 构造函数
  • deque():创建一个空deque

  • deque(int nSize):创建一个deque,元素个数为nSize

  • deque(int nSize,const T& t):创建一个deque,元素个数为nSize,且值均为t

  • deque(const deque &):复制构造函数

  1. 增加函数
  • void push_front(const T& x):双端队列头部增加一个元素X

  • void push_back(const T& x):双端队列尾部增加一个元素x

  • iterator insert(iterator it,const T& x):双端队列中某一元素前增加一个元素x

  • void insert(iterator it,int n,const T& x):双端队列中某一元素前增加n个相同的元素x

  • void insert(iterator it,const_iterator first,const_iteratorlast):双端队列中某一元素前插入另一个相同类型向量的[forst,last)间的数据

  1. 删除函数
  • Iterator erase(iterator it):删除双端队列中的某一个元素

  • Iterator erase(iterator first,iterator last):删除双端队列中[first,last)中的元素

  • void pop_front():删除双端队列中最前一个元素

  • void pop_back():删除双端队列中最后一个元素

  • void clear():清空双端队列中最后一个元素

  1. 遍历函数
  • reference at(int pos):返回pos位置元素的引用

  • reference front():返回手元素的引用

  • reference back():返回尾元素的引用

  • iterator begin():返回向量头指针,指向第一个元素

  • iterator end():返回指向向量中最后一个元素下一个元素的指针(不包含在向量中)

  • reverse_iterator rbegin():反向迭代器,指向最后一个元素

  • reverse_iterator rend():反向迭代器,指向第一个元素的前一个元素

  1. 判断函数
  • bool empty() const:向量是否为空,若true,则向量中无元素
  1. 大小函数
  • Int size() const:返回向量中元素的个数

  • int max_size() const:返回最大可允许的双端对了元素数量值

  1. 其他函数
  • void swap(deque&):交换两个同类型向量的数据

  • void assign(int n,const T& x):向量中第n个元素的值设置为x

实现逻辑

  • push_back(),push_front()
  • pop_back(),pop_front()
  • clear()
  • insert(idx) 根据插入的位置,如果插入的位置靠近front(即idx<size/2),那么选择从前面开始移动,直到空出位置后进行插入,否则选择从后面进行移动插入。
  • erase(idx) 和insert的逻辑类似。

queue

数据存储

  1. queue可以说是一种adapter,因为它是基于其它的容器实现的。
  2. queue有个重要的特点是它不能够被遍历,也就是只能获得其最早放入的元素。
  3. queue可以使用deque或者list这种双向开口的容器来进行实现。

常用成员函数

  • front():返回 queue 中第一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。
  • back():返回 queue 中最后一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。
  • push(const T& obj):在 queue 的尾部添加一个元素的副本。这是通过调用底层容器的成员函数 push_back() 来完成的。
  • push(T&& obj):以移动的方式在 queue 的尾部添加元素。这是通过调用底层容器的具有右值引用参数的成员函数 push_back() 来完成的。
  • pop():删除 queue 中的第一个元素。
  • size():返回 queue 中元素的个数。
  • empty():如果 queue 中没有元素的话,返回 true。
  • emplace():用传给 emplace() 的参数调用 T 的构造函数,在 queue 的尾部生成对象。
  • swap(queue &other_q):将当前 queue 中的元素和参数 queue 中的元素交换。它们需要包含相同类型的元素。也可以调用全局函数模板 swap() 来完成同样的操作。

stack

priority_queue

set

map