deque容器双端队列,可以对头端进行插入删除等操作;与vector的区别
- vector对于头插\删效率低,deque更快
- vector访问元素时的速度会比deque快。这是内部实现决定的。
deque的迭代器支持随机访问。deque内部工作原理
deque内部有个 中控器,维护每段缓冲区中的内容,缓冲区中存放真实数据。中控器维护的是每个缓冲区的地址,使得使用deque时像一片连续的内存空间。
deque构造函数
- deque<T>(); //默认构造形式
- deque(beg,end); //构造函数将[beg,end)区间中的元素拷贝给本身
- deque(n,elem); //构造函数将n个elem拷贝给本身
- deque(const deque &deq); //拷贝构造函数
deque赋值操作
- deque& operator=(const deque &deq);
- assign(beg,end);
- assign(n,elem);
deque大小操作
- bool empty();
- size();
- resize(int num);
- resize(int num,elem);
deque插入和删除两端操作
- push_back(elem);
- push_front(elem);
- pop_back();
- pop_front()
指定位置操作
- insert(int pos,elem); //在pos位置插入一个elem元素的拷贝,返回新数据的位置
- insert(int pos,int count,elem); //在pos位置插入n个elem数据,无返回值
- insert(int pos,begin,end); //在pos位置插入[begin,end)区间的数据,无返回值
- clear()
- erase(beg,end); //删除[beg,end)区间的数据,返回下一个数据的位置
- erase(int pos); //删除pos位置的数据,返回下一个数据的位置
deque数据存取
- at(int idx);
- operator[];
- front();
- back();
deque排序
- sort(iterator begin,iterator end); //对begin和end之间的元素进行排序,默认是升序
- vector也可以使用这个算法排序
stack容器stack构造函数
- stack<T> stk;
- stack(const stack &stk)
stack赋值操作
- operator=(const stack& stk);
stack大小操作
- empty();
- int size();
stack数据存取
- push(elem);
- pop();
- Elem top();
queue容器queue构造函数
- queue<T> que;
- queue(const queue& que)
queue赋值操作
- operator=(const queue& que);
queue大小操作
- empty();
- int size();
queue数据存取
- push(elem);
- pop();
- back(); //返回队尾元素
- font(); //返回队头元素
list容器链表,由一系列结点构成。结点:由存储数据元素的数据域和指向下一个结点地址的指针域构成。list是一个双向循环链表 List的插入和删除都不会造成原list迭代器的失效,这在vector中是不成立的。list构造函数
- list<T> lst;
- list(beg,end);
- list(n,elem);
- list(const list& lst);
list赋值与交换
- assign(beg,end);
- assign(n,elem);
- list& operator=(const list& lst);
- swap(list& lst);
list大小操作
- empty();
- int size();
list数据插入和删除
- push_back(elem);
- pop_back();
- push_front(elem);
- pop_front();
- insert(pos,elem); //返回新数据的位置
- insert(pos,n,elem);
- clear();
- erase(beg,end);
- erase(pos); //返回下一个数据的位置
- remove(elem);
list数据存取
- font();
- back();
不可以用at() 和[]访问;迭代器不支持随机访问;list<int>::iterator it = l1.begin();it++;it --; //都可以it =it +1; //不可以,不支持随机访问。
list反转和排序
- reverse(); //反转链表
- sort(); //排序链表
所有不支持随机访问迭代器的容器,不可以用排序算法。这里sort是成员函数
set/multiset容器set/multiset是关联式容器,底层结构是二叉树实现。所有元素都会在插入时自动被排序
- set和multiset的区别
- set不允许容器中有重复的元素
- multiset允许容器中有重复元素
set构造和赋值
- set<T> st;
- set(const set& st);
- set& operator=(const set& st);
set大小和交换
- size();
- empty();
- swap(st);
set插入和删除
- insert(elem);
- clear();
- erase(pos);
- erase(beg,end);
- erase(elem);
set查找和统计
- find(key); //查找key是否存在,如果存在,返回该键的元素的迭代器;若不存在,返回set.end();
- count();
pair对组创建成对出现的数据,利用对组可以返回两个数据。
- pair<type,type> p(value1,value2);
- pair<type,type> p = make_pair(value1,value2);