STL
一、vector
本质上是一个动态数组,运用了一个倍增的思想
empty( ) 和 size( ) 是所有容器都有的操作
#include <vector>
int main()
{
vector<int> a;
a.empty();
a.size();
a.clear();
front(); / back();
push_back(); / pop_back();
begin(); / end();
for (int i = 0; i < a.size(); i++)
cout << a[i] << ' ';
for (vector<int>::iterator i = a.begin(); i != a.end(); i++)
cout << *i << ' ';
for (auto x : a)
cout << x << ' ';
vector<int> a(4, 3), b(3, 4);
if (a < b) puts("a < b");
return 0;
}
系统为某一程序分配空间时,所需时间与空间大小无关,与申请次数有关。
二、pair
可以存储一个二元组,first 第一个元素,second 第二个元素
支持比较运算,以first为第一关键字,以second为第二关键字(类似于字典序),常用于排序
int main()
{
pair<int, string> p;
p.first(); p.second();
p = make_pair(10, "psy");
p = (10, "abc");
pair<int, pair<int, int>> p;
return 0;
}
三、string
处理字符串
substr() 返回某一个字串
c_str() 返回string字符数组对应的头指针
#include <string>
int main()
{
string op;
op.size()/op.length();op.empty();op.clear();
op += "abc";
a.substr(2, 10);
a.substr(2);
printf("%s\n", a.c_str());
return 0;
}
四、queue、priority_queue
queue:push() 往队尾插入元素;front() 返回队头元素;pop() 弹出队头元素
#include <queue>
int main()
{
queue<int> q;
q.size(); q.empty();
q.push(); q.front(); q.back(); q.pop();
q = queue<int>();
return 0;
}
priority_queue:优先队列,其实是一个堆,push() 往堆里插入一个元素;top() 返回堆顶元素;pop() 弹出堆顶元素
#include <queue>
#include <vector>
int main()
{
priority_queue<int> heap;
priority_queue<int, vector<int>, greater<int> > heap;
heap.push(); heap.top(); heap.pop();
return 0;
}
五、stack
栈:先进后出,后进先出
#include <stack>
int main()
{
stack<int> s;
s.size(); s.empty();
s.push();
s.top();
s.pop();
return 0;
}
六、deque
双端队列,队头队尾都可以插入弹出,可看作是一个加强版的vector
#include <deque>
int main()
{
size(); empty(); clear();
front(); back();
push_back(); pop_back();
push_front(); pop_front();
begin(); end();
[];
return 0;
}
七、set、map、multiset、multimap
基于平衡二叉树(红黑树)来实现,动态地维护有序序列
set
#include <set>
int main()
{
set<int> s;
multiset<int> ms;
s.size(); s.empty(); s.clear();
begin(); end();
s.insert();
s.find();
s.count();
s.erase();
lower_bound();
upper_bound();
return 0;
}
map
#include <map>
int main
{
map<string, int> a;
insert();
erase();
find();
a["abc"] = 1;
cout << a["abc"] endl;
return 0;
}
八、unordered_set、unordered_map、unordered_multiset、unordered_multimap
基于哈希表来实现
同上面类似,增删查改的时间复杂度大多是 O(1).
不支持 lower_bound() / upper_bound() ,迭代器的加加减减,所有与排序有关的都不支持
九、bitset
压位
#include <iostream>
int main()
{
bitset<10000> s;
~, &, |, ^
>>, <<
==, !=
[]
count();
any();
none();
set();
set(k, v);
reset();
flip();
flip(k);
return 0;
}
|