容器适配器是封装容器,使其表现出我们想要的数据结构特性,如栈、队列。

标准库定义了三种适配器:

  • stack(栈)

    • 底层容器:vector,list,默认deque。
    • 在stack头文件中。
  • queue(队列)

    • 底层容器:list,默认deque。
    • 在queue头文件中。
    • FIFO,新元素插在堆尾,从队首删除。
  • priority_queue(优先队列)

    • 底层容器:deque,默认vector。
    • 在queue头文件中。
    • 元素以<运算来确定优先级

适配器通用操作

  1. size_type //一种类型,足以保存当前类型的最大对象的大小
  2. value_type //元素类型
  3. container_type //实现适配器 的底层容器类型
  4. A a; //创建一个名为a的空适配器
  5. A a(c); //创建一个名为a的适配器,带有容器c的一个拷贝
  6. =、!=、<、<=、>、>= //返回底层容器的比较结果
  7. a.empty(); //是否为空
  8. a.size(); //返回a中的元素数目
  9. swap(a,b); //交换a和b的内容,a和b必须有相同类型,包括底层容器类型也必须相同
  10. a.swap(b);
  11. stack<int> stk(deq) ; //从deq拷贝元素到stk,默认底层容器deque
  12. //在vector上实现的空栈
  13. stack<string, vector<string>> str_stk;
  14. //str_stk2在vector上实现,初始化时保存svec的拷贝
  15. stack<string , vector<string>> str_stk2(svec);

stack操作

  1. s.pop() //弹栈(删除栈顶元素)、不返回该元素值
  2. s.push(item) //压栈item的拷贝,或者
  3. s.emplace(args) //压栈由args构建的元素
  4. s.top() //返回栈顶元素,不弹栈
  5. stack<int> intStack; //空栈,选择默认底层容器
  6. for (size_t ix = 0; ix != 10; ++ix)
  7. intStack.push(ix); //压满栈
  8. while (intStack.empty()){
  9. int value = intStack.top(); //栈顶值
  10. intStack.pop(); //弹栈
  11. }

queue操作

  1. q.pop(); //queue:返回首元素,不删除
  2. //priority_queue:返回最高优先级的元素,不删除
  3. q.front(); //返回首元素,不删除此元素,只适用于queue
  4. q.back(); //返回尾元素,不删除此元素,只适用于queue
  5. q.top(); //返回最高优先级元素,但不删除该元素
  6. //只适用于priority_queue
  7. q.push(item); //queue:在末尾创建一个元素值为item
  8. //priority_queue:恰当的位置创建一个元素,
  9. q.emplace(args); //item由args构造