C++ STL 容器、迭代器、适配器

1、容器vector,list,deuqe是C++STL中三种基本容器实现,它们不可能互为实现同时又不损失效率
2、stack和queue则都可以在这三种基本容器序列基础上实现,所以没有定义为独立的容器,而只作为基本容器适配器
3、容器适配器所提供的是原来容器的一个受限的界面,适配器不提供迭代器
4、所有stack和queue是用deque基本容器作为实现方式的
5、关联容器(查找表)包括set、map、hash_set、hash_map,主要用于查找,提供迭代器





适配器主要有容器适配器、迭代器适配器和函数适配器
1、容器适配器有stack、queue、priority_queue
2、迭代器适配器有back_insert_iterator, front_insert_iterator, inser_iterator, reverse_iterator, istream_iterator, 
ostream_iterator, istreambuf_iterator, ostreambuf_iterator等等

3、函数适配器


#include <stdio.h>
//容器
#include <vector>
#include <list>         //双向链表
#include <deque>
#include <array>        //固定大小的数组
#include <forward_list> //单向链表
//容器适配器
#include <stack>
#include <queue>      //含queue、priority_queue


//迭代器
#include <iterator>
//迭代器适配器
#include <iterator>   //含back_insert_iterator、front_insert_iterator等等

//关联容器(查找表)
#include <set>        //包括set、multiset 底层数据结构为红黑树,有序
#include <map>        //包括map、multimap 底层数据结构为红黑树,有序
#include <hash_set>   //包括hash_set、multihash_set 底层数据结构为哈希表,无序
#include <hash_map>   //包括hash_map、multihash_map 底层数据结构为哈希表,无序
#include <unordered_set>  //包括unordered_set、unordered_multiset 无序
#include <unordered_map>  //包括unordered_map、unordered_multimap 无序
//multi表示元素可重复

using namespace std;

struct cmpIntGreat {
  bool operator()(int first, int second) {
    return first > second;
  }
};

int main(){
  priority_queue<int, deque<int>, less<int>>  q1; //默认最大堆
  priority_queue<int, deque<int>, greater<int>>  q2;

  set<int, less<int>> s1; //默认升序
  set<int, greater<int>> s2;
  set<int, cmpIntGreat> s3; //自写compare函数(注意与sort的compare函数比较)

  //迭代器使用示例
  vector<int> ivec(10,1);
  for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();++iter)	//end()中不含有效元素
  {
    *iter=2; //使用 * 访问迭代器所指向的元素
  }

  return 0;
}







vector函数: push_back、pop_back、back、front、按下标取值[]
list函数: push_back、pop_back、push_front、pop_front、back、front
deque函数: push_back、pop_back、push_front、pop_front、back、front、按下标取值[]
stack函数: push、pop、top
queue函数: push、pop、back、front
priority_queue函数: push、pop、top
//vector底层数据结构为数组,不提供前端插入、删除函数,开销太大
//list底层数据结构为链表,不提供按下标取值[]函数,开销太大




阅读更多
换一批

没有更多推荐了,返回首页