没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
vector
vector 是 STL 提供的一种内存连续,长度可变的动态数组。
虽说动态数组,但 vector 的底层仍是定长数组。当数组大小不足时,vector 会倍增的申请、
分配更多连续的空间,而之前的空间则清理删除。
定义
vector<int>h; 定义一个数据类型为 int 的 vector h。需要头文件 #include<vector>。
函数
1.元素访问
h.begin() 返回一个迭代器,指向 h 的第一个元素的位置。
h.end() 返回一个迭代器,指向 h 的最后一个元素的后一个位置。
h.front() 返回 h 中的第一个数。
h.back() 返回 h 中的最后一个数。
h[x] 返回 h 下标为 x 的元素。
2. 元素修改
h.clear() 清空 h。
h.push_back(int val) 在 h 的末尾加入元素 val。
h.pop_back() 删除 h 的最后一个元素。
h.insert(iterator pos,int val) 在 pos 位置之前插入一个元素 val,时间复杂度与插入位置到
h.end() 的距离有关。
h.erase(iterator pos) 删除 pos 位置的元素,并返回指向下一个迭代器,时间复杂度同 insert
操作。
h.erase(iterator sta,iterator end) 删除位于 [sta,end) 之间的元素,并返回指向下一个迭代
器,时间复杂度同 insert 操作。
3. 元素个数
h.size() 返回 h 中的元素个数。
h.empty() 检查 h 是否为空。
#include <vector>
#include <algorithm>
using namespace std;
vector<int> v = {1, 2, 3, 4, 5}; // 定义一个 vector
auto it1 = lower_bound(v.begin(),v.end(),3); //返回第一个大于或等于 3 的元素的迭
代器
auto it2 = upper_bound(v.begin(),v.end(),3); //返回第一个大于 3 的元素的迭代器
auto it3 = find(v.begin(), v.end(), 3); // 返回指向元素 3 的迭代器
stack
stack 是 STL 提供的一种栈。
定义
stack<int>h; 定义一个数据类型为 int 的 stack h。需要头文件 #include<stack>。
1. 元素访问
h.top() 返回 h 的栈顶元素。
2. 元素修改
h.push(int val) 在 h 的栈顶加入元素 val。
h.pop() 弹出 h 的栈顶元素。
3. 元素个数
h.size() 返回 h 中的元素个数。
h.empty() 检查 h 是否为空。
set
set 是 STL 提供的集合,能实现平衡树的部分操作,其内部是一颗红黑树。
set 不支持重复元素,若需要用到多个相同元素,可使用 multiset。
定义
set<int>T; 定义一个数据类型为 int 的 set T。需要头文件 #include<set>。
函数
1. 元素访问
T.begin() 返回一个迭代器,指向 T 的第一个元素的位置。
T.end() 返回一个迭代器,指向 T 最后一个元素的后一个位置。
T.rbegin() 返回一个逆向迭代器,指向 T 的第一个元素的前一个位置。
T.rend() 返回一个逆向迭代器,指向 T 的最后一个元素的位置。
T.count(int val) 返回 T 中元素 val 的个数。
T.find(int val) 返回一个迭代器,指向元素 val,不存在则返回 T.end()。
T.lower_buond(int val)返回一个迭代器,指向 T 中第一个不小于 val 的元素位置,不存在
则返回 T.end()。
T.upper_buond(int val) 返回一个迭代器,指向 T 中第一个大于 val 的元素位置,不存在则
返回 T.end()。
2. 元素修改
T.clear() 清空 T。
T.insert(int val) 在 T 中插入一个元素 val,并返回一个 pair,first 为迭代器,表示插入位
置,second 为布尔值,表示是否插入成功。
T.erase(int val) 删除所有与 val 相等的元素,并返回删除元素个数。
T.erase(iterator pos) 删除 pos 位置的元素,并返回指向下一个迭代器。
T.erase(iterator sta,iterator end) 删除位于 [sta,end) 之间的元素,并返回指向下一个迭代
器。
3. 元素个数
T.size() 返回 T 中的元素个数。
T.empty() 检查 T 是否为空。
queue
queue 是 STL 提供的一种队列。
定义
queue<int>h; 定义一个数据类型为 int 的 queue h。需要头文件 #include<queue>。
函数
1. 元素访问
h.front() 返回 h 的队首元素。
h.back() 返回 h 的队尾元素。
2. 元素修改
h.push(int val) 在 h 的队尾加入元素 val。
h.pop() 弹出 h 的队首元素。
3. 元素个数
h.size() 返回 h 中的元素个数。
h.empty() 检查 h 是否为空。
和 stack 基本一致,只是多了一些。
特殊队列:双端队列 deque
deque<int>h; 定义一个数据类型为 int 的 deque h。需要头文件 #include<deque>。
1. 元素访问
h.front() 返回 h 的队首元素。
h.back() 返回 h 的队尾元素。
h[x] 返回 h 下标为 x 的元素。
2. 元素修改
* h.push_front(int val) 在 h 的队尾加入元素 val。
* h.push_back(int val) 在 h 的队首加入元素 val。
* h.pop_front() 弹出 h 的队首元素。
* h.pop_back() 弹出 h 的队尾元素。
* h.insert(iterator pos,int val) 在 pos 位置之前插入一个元素 val。
* h.erase(iterator pos) 删除 pos 位置的元素,并返回指向下一个迭代器。
* h.erase(iterator sta,iterator end) 删除位于 [sta,end) 之间的元素,并返回指向下一个迭
代器。
3. 元素个数
* h.size() 返回 h 中的元素个数。
* h.empty() 检查 h 是否为空。
好像和 vector 差不多,而且好像比 vector 更高级。
但不用一次你绝对不知道 deque 的空间复杂度多大(血的教训)
特殊队列:优先队列 priority_queue
priority_queue 是 STL 提供的一种二叉堆,默认大根堆。
priority_queue<int>h; 定义一个数据类型为 int 的 priority_queue h。
需要头文件 #include<queue>。
1. 元素访问
h.top() 返回 h 中的最大值。
2. 元素修改
h.push(int val) 在 h 中的加入元素 val。
h.pop() 弹出 h 中的最大值。
3. 元素个数
h.size() 返回 h 中的元素个数。
h.empty() 检查 h 是否为空。
map
map 是 STL 提供的映射,由键对应值而构成键值对,其内部是一颗红黑树。
map 不支持重复键,若需要用到多个相同键,可使用 multimap。
定义
map<long long,int>T; 定义一个键为 long long、值为 int 的 map T。
需要头文件 #include<map>。
函数
1. 元素访问
T[long long val] 返回一个整数,即键 val 所映射的值。
T.begin() 返回一个迭代器,指向 T 的第一个键值对的位置。
T.end() 返回一个迭代器,指向 T 的最后一个键值对的后一个位置。
T.rbegin() 返回一个逆向迭代器,指向 T 的第一个键值对的前一个位置。
T.rend() 返回一个逆向迭代器,指向 T 的最后一个键值对的位置。
T.count(long long val) 返回 T 中键为 val 的个数。
T.find(long long val) 返回一个迭代器,指向键为 val,若不存在返回 T.end()。
T.lower_buond(long long val) 返回一个迭代器,指向 T 中第一个键不小于 val 的键值对位
置,不存在则返回 T.end()。
T.upper_buond(long long val) 返回一个迭代器,指向 T 中第一个键大于 val 的键值对位置,
不存在则返回 T.end()。
2. 元素修改
T.clear() 清空 T。
T.insert(pair<long long,int> P) 在 T 中插入一个键值对 P,并返回一个 pair,first 为迭代器,
表示插入位置,second 为布尔值,表示是否插入成功。
T.erase(long long val) 删除所有键为 val 的键值对,并返回删除元素个数。
T.erase(iterator pos) 删除 pos 位置的键值对,并返回指向下一个迭代器。
T.erase(iterator sta,iterator end) 删除位于 [sta,end) 之间的元素,并返回指向下一个迭代
器。
3. 元素个数
T.size() 返回 T 中的元素个数。
T.empty() 检查 T 是否为空。
/*
Kruskal 算法
对每个当前最短的边,若不成环,则将该边加入 MST(最小生成树)集合,直到所有节点都
已在图里完成
*/
#include<iostream>
#include<queue>
#include<utility>
#include<vector>
#include<cstring>
using namespace std;
int parent[501],m[501][501],A,B;
class cmp{
public:
bool operator () (pair<int,int>a1,pair<int,int>b1)
{
return m[a1.first][a1.second]>m[b1.first][b1.second];
}
};
priority_queue<pair<int,int>,vector<pair<int,int> >,cmp>q;
vector<pair<int,int> >MST;
bool if_v[501];
int find(int a)//并查集
{
if(parent[a]==a)return a;
else
{
parent[a]=find(parent[a]);
return parent[a];
}
}
void _union(int a,int b)
{
parent[find(a)]=find(b);
}
void kruskal()
{
bool flag=false;
pair<int,int>tmp;
while(!flag)
{
flag=true;
for(int i=0;i<B;++i)find(i);
int f=parent[0];
剩余29页未读,继续阅读
资源评论
yaosiqi310
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功