C++STL的简要
vector
vector 变长数组(动态数组),支持随机访问。
#include<iostream>
#include<vector>
using namespace std;
int main()
{
// 初始化方法:
vector<int> a;
vector<int> b(10); // 长度为10的vector数组,10个元素均为0
vector<int> c(10, 2); // 长度为10的vector数组,10个元素均为2
a.size(); // 返回vector元素个数
a.empty(); // 返回vector容器是否为空
a.clear(); // 清空vector容器
// 向vector中插入10个数
for (int i = 0; i < 10; i++)
a.push_back(i);
// 遍历方式:
for (int i = 0; i < 10; i++)
cout << a[i] << ' ';
// 输出为:0 1 2 3 4 5 6 7 8 9
for (vector<int>::iterator it = a.begin(); it != a.end(); it++)
cout << *it << ' ';
// 输出为:0 1 2 3 4 5 6 7 8 9
for (auto x : a)
cout << x << ' ';
// 输出为:0 1 2 3 4 5 6 7 8 9
// vector容器可比较大小(按照字典序)
vector<int> x(4, 3), y(3, 4);
if (x < y)
cout << "x < y";
// 输出为:x < y
}
queue
queue队列,遵循先进先出原则!
#include <iostream>
#include <queue>
using namespace std;
int main()
{
queue<int> q;
/*
q.size() 返回队列长度
q.empty() 返回队列是否为空
q.push(x) 向队尾插入一个元素x
q.front() 返回队头元素
q.back() 返回队尾元素
q.pop 弹出队头元素
*/
}
priority_queue优先队列(大根堆,优先弹出最大值)
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
int main()
{
priority_queue<int> p;
/*
p.size() 返回堆长度
p.empty() 返回堆是否为空
p.push(x) 插入一个元素x
p.top() 返回堆顶元素(即最大值)
p.pop() 弹出堆顶元素(即删除最大值)
*/
/*
实现小根堆的方法:
1. 直接插入负数
2. priority_queue<int, vector<int>, greater<int>> p;
*/
}
stack
stack栈,遵循先进后出原则!
#include<iostream>
#include<stack>
using namespace std;
int main(){
stack<int> s;
/*
s.size() 返回栈长度
s.empty() 返回栈是否为空
s.push(x) 插入一个元素x
s.top() 返回栈顶元素
s.pop() 弹出栈顶元素
*/
}
deque
deque 双端队列,支持随机访问。
#include <iostream>
#include <deque>
using namespace std;
int main()
{
deque<int> d;
/*
d.size() 返回队列长度
d.empty() 返回队列是否为空
d.clear() 清空队列
d.front() / d.back() 返回第一个/最后一个元素
d.push_front(x) / d.push_back(x) 向队首/队尾插入一个元素x
d.pop_front() / d.pop_back() 弹出队首/队尾一个元素
d.begin() 返回队头的迭代器
d.end() 返回队尾下一个元素的迭代器
*/
}
set
-
set有序集合- 元素都是排序好的
- 没有重复的元素
#include <iostream>
#include <set>
using namespace std;
int main()
{
set<int> s;
/*
s.size() 返回集合大小
s.empty() 返回集合是否为空
s.insert(x) 将x插入集合
s.count(x) 查询集合内有没有x,如果有返回1,如果没有返回0
s.erase(x) 将集合中值为x的元素删除
s.begin() 返回set容器的第一个元素的地址
s.end() 返回set容器的最后一个元素地址
s.clear() 删除set容器中的所有的元素
lower_bound(x) 返回大于等于的最小的数的迭代器
upper_bound(x) 返回大于x的最小的数的迭代器
*/
}
multiset有序多重集合- 元素都是排序好的
- 有重复的元素
#include <iostream>
#include <set>
using namespace std;
int main()
{
multiset<int> s;
/*
s.size() 返回集合大小
s.empty() 返回集合是否为空
s.insert(x) 将x插入集合
s.count(x) 返回集合中元素x的个数
s.erase(x) 将集合中值为x的元素删除
s.clear() 删除set容器中的所有的元素
lower_bound(x) 返回大于等于的最小的数的迭代器
upper_bound(x) 返回大于x的最小的数的迭代器
*/
}
map
map基于平衡二叉树(红黑树),动态维护有序序列,支持随机访问(时间复杂度\(O(\log_2{n})\))
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main()
{
map<string, int> m;
/*
size/empty/clear/begin/end均与set类似
insert() 插入的数是一个pair<key_type, value_type>
m.find(x) 在变量名为m的map中查找key为x的二元组
*/
}
multimap
#include <iostream>
#include <map>
using namespace std;
int main()
{
map<int, int> m;
/*
size/empty/clear/begin/end均与set类似
insert() 插入的数是一个pair<key_type, value_type>
*/
}
unordered_set和unordered_map
增删改查时间复杂度\(O(1)\)
#include <unordered_set>
unordered_set<int> a; //哈希表实现,不能有重复元素
unordered_multiset<int> a; //哈希表实现,可以有重复元素
#include<unordered_map>
unordered_map<int, int> a; //哈希表实现
bitset
bitset 压位
#include <bitset>
bitset<10000> S;
/*
支持位运算:
~, &, |, ^
>> , <<
==, !=
count() 返回有多少个1
any() 判断是否至少有一个1
none() 判断是否全为0
set() 把所有位置成1
set(k, v) 把第k位变成0
reset() 把所有位置成0
flip(k) 把第k位取反
*/

浙公网安备 33010602011771号