C++_STL

vector

初始化

vector<int> v;
vector<int> v(10); 定义长度为10的数组
vector<int> v(10,3); 定义长度为10的数组,并且每一个值都是3

获取数组长度

v.size()

判断数组是否为空

v.empty();

清空

v.clear();

获取首尾元素

v.front();
v.end();

添加/删除

v.push_back();
v.pop_back();

首尾迭代器

v.begin();v.end();

遍历方式

vector<int> v;
for(int i = 0;i < v.size();i++) cout << v[i] << " ";

for(auto it = v.begin();i != v.end();i++) cout << *i << " ";

for(auto it : v) cout << it << " ";

集合比较

vector<int> v1(3,4),v2(4,3);
if(v1 < v2) cout << "Yes" << endl;
else cout << "No" << endl;
//No

Pair

pair<int,string> p

获取第一个关键字

p.first();

获取第二个关键字

p.second();

支持比较运算,先比较第一个关键字,接着比较第二个关键字

初始化

p = make_pair(10,"sdfdsf");
p = {10,"dsfsdf"};

pair也可以实施嵌套效果

pair<int,pair<int,string>> p;

String

将原来的char数组替换成string

支持字符串和字符拼接

string s;
s += 'a';
s += "sfsdf";

返回元素的首地址

cout << s.c_str() << endl;

清除,判断为空,长度

s.size();
s.clear();
s.empty();

Queue

初始化

queue<int> q;

添加元素

q.push(1);

弹出元素

q.pop();

获取首尾元素

q.front();
q.back();

清空队列

q = queue<int>();

Priority_queue(heap)

初始化

priority_queue<int> q; //默认情况下是大顶堆

小顶堆

q.push(-x); //添加相反数按照大顶堆排序-> 小顶堆
priority_queue<int,vector<int>,greater<int>> heap;

插入

q.push(x);

弹出

q.pop();

返回堆顶元素

q.top();

Stack

初始化

stack<int> st;

获取栈长度

st.size();

判断栈是否为空

st.empty();

向栈顶添加元素

st.push(x);

弹出栈顶元素

st.pop();

返回栈顶元素

st.top();

Deque

初始化

deque<int> dq;

sec

dq.size();
dq.emtpy();
dq.clear();

front/back

dq.front();
dq.back();

push_back/pop_back

dq.push_back(x);dq.pop_back(x);

push_front/pop_front()

dq.push_front(x);dq.pop_front(x);

begin/end

dq.begin();dq.end();

Set/multiSet

插入操作

set.insert(x);

查找一个数

set.find(x);

判断某一个数出现的个数

set.count(x);

删除操作

set.erase(x) //默认情况下是将所有x都删,如果传入的是迭代器那么指定删除

lower_bound/upper_bound

  • lower_bound返回的是大于等于x的最小数的迭代器
  • upper_bound返回的是大于x的最小数的迭代器

Map/multiMap

初始化

map<int,int> maps;

insert

maps.insert(pair<>)

erase

maps.erase(pair/迭代器)

find

maps.find()

数组形式进行键值访问

map<int,string> maps;
maps[1] = "sdfdsf";
cout << maps[1] << endl;

lower_bound/upper_bound

unordered

unordered_set,unordered_map,unordered_multiset,unordered_multimap

和上面一样,增删改查时间复杂度都是O(1)

不支持lower_bound和upper_bound

bitset(压位)

初始化

bitset<100000> s;

支持的位运算

~ ^ & | >> << == !=

检查1的个数

count();

判断是否至少有一个1

any();

判断是否全

none();
set() //把所有位置变成1
set(k,v) //将第k位变为v
reset() 把所有位变为0
flip 将所有位去反
flip(k) 把第k位取反