1 vector(变长数组)
初始化:
vector
函数用法:
a.size() O(1) 时间求出元素个数
a.empty() O(1)时间判断vector是否为空,若空返回true,非空返回false
a.clear() 清空vector
a.front()/a.back() 返回vector中的第一个数(最后一个数)
a.push_back(int x)/a.pop_back() 插入最后一个数/删除最后一个数
a.begin()/a.end() 返回a第一个迭代器/返回a最后一个迭代器的下一个
[ ]支持随机存址
支持比较运算(用字典序比较) 例:4个3小于3个4
遍历方法:
#include
#include
using namespace std;
int main()
{
vector a;
for(int i=1;i<=10;i++) a.push_back(i);
for(int i=0;i::iterator it=a.begin();it!=a.end();it++) cout << *it << ' ';
cout << endl;
for(auto x : a) cout << x << ' ';
cout << endl;
system("pause");
return 0;
}
2 string(字符串)
string a;
a.size()//a.length()
a.empty()
a.clear()
可以直接用+法. 例: a=“abc”,a+="def",a+='g' >> a="abcdefg"
a.substr(子段起始索引,子段长度) 返回子段。当子段长度省略或者超出最大范围时 返回从起始位置开始到字符串末尾的全部字符.
a.c_str() 返回存储a的起始地址
3 queue(队列)
queue
q.size()
q.empty()
无q.clear() 若想清空 直接q=queue
q.push(int x) 从队尾插入x
q.front()/q.back() 返回队头元素/队尾元素
q.pop() 删除队头元素
4 priority_queue(优先队列)(堆) 默认是大根堆
初始化成小根堆 priority_queue(int,vector
heap.top() 访问堆顶元素(也就是优先级最高的元素)
heap.push(int x) 向堆中插入元素
heap.pop() d出堆顶元素(也就是优先级最高的元素)
5.stack(栈)
stack
stk.push(int x) 向栈顶插入元素
stk.pop() 删除栈顶元素
stk.top() 访问栈顶元素
stk.size()
stk.empty()
6 deque(双端队列)
deque
d.size()
d.clear()
d.empty()
d.front()
d.back()
d.push_back()/d.pop_back() 从队尾插入/d出
d.push_front()/d.pop_front() 从队首插入/d出
d.begin()/d.end()
[]
7 set/multiset (集合)增删改查为O(logn)
set会进行 自动去重+排序
multiset里可以有重复元素
set
multiset
s.size()
s.clear()
s.empty()
s.insert() O(logn)
s.count(int x) 返回元素个数(set中要么0要么1) multiset(可以多种情况) (可用于检查元素是否存在,代替find()函数)
s.erase( )
①输入为一个数 删除所有这个数
②输入为一个迭代器 删除这个迭代器
s不支持[]
lower_bound/upper_bound(用二分机制,必须用于已排好序的容器)
lower_bound(起点迭代器,终点迭代器,数值x) 返回大于等于x的第一个数的迭代器
upper_bound(起点迭代器,终点迭代器,数值x) 返回大于x的第一个数的迭代器
对于数组而言:
大于x的第一个数的下标就是 lower_bound(a,a+n,x)-a
8 map/multimap 增删改查为O(logn) 用key自动排序
map
multimap可以有重复的key,且不支持[]
m.size()
m.empty()
m.begin()/end()
m.clear()
m.insert(pair类型的key-value)
m.erase(pair类型或者迭代器)
m[key] - value O(logn)时间增改查 // multimap不支持
9 unordered_map /unordered_set
增删改查为O(1) 但无序
10
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)