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

来源:互联网 发布:微信订餐软件 编辑:程序博客网 时间:2024/05/17 21:38
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底层数据结构为链表,不提供按下标取值[]函数,开销太大




0 0
原创粉丝点击