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 <unordered_set> //包括unordered_set、unordered_multiset 底层数据结构为哈希表,无序
#include <unordered_map> //包括unordered_map、unordered_multimap 底层数据结构为哈希表,无序
#include <hash_set> //包括hash_set、multihash_set 底层数据结构为哈希表,无序,不建议使用
#include <hash_map> //包括hash_map、multihash_map 底层数据结构为哈希表,无序,不建议使用
//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底层数据结构为链表,不提供按下标取值[]函数,开销太大