基础知识总结--常用数据结构C++版
1、vector
#include <vector>
创建:vector<T> v;
结尾插入:v.push_back(i);
返回头指针,指向第一个元素:v.begin();
返回尾指针,指向最后一个元素的下一个元素:v.end();
返回元素个数:v.size();
返回是否为空:v.empty();
重定义大小:v.resize();
返回v长度:v.maxsize();
删除容器最后一个元素:v.pop_back();
显示存在的第一个元素:v.front();
显示存在的最后一个元素:v.back();
2、map
#include <map>
创建:map<T1,T2> m;
插入元素:m.insert(pair<T1,T2>(v1,v2));
返回头指针,指向第一个元素:m.begin();
返回尾指针,指向最后一个元素的下一个元素:m.end();
返回指定元素出现次数:m.count(key);
返回是否为空:m.empty();
查找元素:m.find(key);
删除元素:m.erase(iter);//iter迭代器
m.erase(key);//指定关键字
返回元素个数:m.size();
3、hash_map
#include<hash_map>
用法基本同map,查找速度快于map,O(1),map-O(logn),但空间要求较高,超大数据量时用hash_map
4、queue
#include <queue>
创建队列:queue<T> q;
元素入队:q.push(i);
队首元素出队:q.pop();
返回队首元素:q.front();
返回队尾元素:q.back();
返回是否为空:q.empty();
返回队中元素个数:q.size();
5、priority_queue
#include <queue>
创建优先级队列:priority_queue <T> pq;//默认大根堆
priority_queue <T,vector<T>,greater<T> > pq;//小根堆,vector<T>可以换成其他容器,默认用的vector
访问队首元素:pq.top();
返回是否为空:pq.empty();
返回队中元素个数:pq.size();
元素入队并排序:pq.push();
队首元素出队:pq.pop();
6、deque
#include <deque>
创建双端队列:deque<T> dq;
从尾部插入元素:dq.push_back();
从头部插入元素:dq.push_front();
返回第一个元素引用:dq.front();
返回最后一个元素引用:dq.back();
弹出第一个元素:dq.pop_front();
弹出最后一个元素:dq.pop_back();
返回头指针,指向第一个元素:dq.begin();
返回尾指针,指向最后一个元素的下一个元素:dq.end();
返回队中元素个数:dq.size();
清空队列:dq.clear();
删除pos位置元素:dq.erase(pos);
删除[p1,p2)区间元素:dq.erase(p1,p2);
在pos前插入元素:dq.insert(pos,val);
返回是否为空:dq.empty();
返回逆向队列第一个元素:dq.rbegin();
返回逆向队列最后一个元素:dq.rend();
7、stack
#include <stack>
创建栈:stack<T> s;
元素压入栈:s.push(i);
栈顶元素弹出:s.pop();
返回栈顶元素:s.top();
返回栈中元素个数:s.size();
返回是否为空:s.empty();
8、list
#include <list>
创建链表:list<T> l;
list<T> l(l1);//利用l1初始化l
list<T> l(l1.begin(),li.end());//同上
从尾部插入元素:l.push_back();
从头部插入元素:l.push_front();
删除最后一个元素:l.pop_back();
删除第一个元素:l.pop_front();
返回是否为空:l.empty();
删除链表中重复元素:l.unique();
给链表排序:l.sort();
返回链表中元素个数:l.size();
合并l与l1并情况l1:l.merge(l1);//l与l1需要有序
翻转链表中元素:l.reverse();
返回最后一个元素:l.back();
返回第一个元素:l.front();
返回头指针,指向第一个元素:l.begin();
返回尾指针,指向最后一个元素的下一个元素:l.end();
清空链表:l.clear();
删除等于val的元素:l.remove(val);
重定义大小:l.resize();
在iter1到iter2范围内找值为val的位置:iter=find(iter1,iter2,val);
在l的iter位置前插入l1的[iter1,iter2)段,并将l1中的对应段删除:l.splice(iter,l1,iter1,iter2);
删除指定元素:l.erase(iter);