随笔 - 73  文章 - 0 评论 - 0 阅读 - 6680
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

bitset

在头文件#include

bitset<4> a;
支持下标从0开始,0在最后面
a[0]=1;a[2]=1;//a:0101

bitset可以进行的运算:

bitset<4> a,b;
a=a|b;	a=a&b;	a=a^b;	a=b<<2;	a=b>>3;//移位越过的自动舍弃

成员函数:

count();//返回1的个数
bool test (size_t pos);//返回下标pos位是否为1
bool any();//只要有一位为1,返回true
bool none();//若全为0返回true
bool all();//若全为1返回true
set();//全部置1
set(pos);//第pos位置一
reset();//全部置0
reset(pos);//第pos位置1
flip();//全部取反
flip(pos);//pos位取反
.to_string();//转换为字符串

1,优先队列

包含在头文件#include

priority_queue q;//默认顶部是最大值

和队列基本操作相同:

  • top 访问队头元素
  • empty 队列是否为空
  • size 返回队列内元素个数
  • push 插入元素到队尾 (并排序)
  • emplace 原地构造一个元素并插入队列
  • pop 弹出队头元素
  • swap 交换内容

有两种形式:

priority_queue <int, vector<int>, greater<int> > q; //顶部是最小值

priority_queue <int, vector<int>, less<int> >q;//顶部是最大值

对于自定义类型:

struct node
{
	int end, power;
	bool operator < (const node& b)const
	{
		return power > b.power;
	}
};
priority_queue<node> q; //根据node节点中的power值排序,顶部是最小值return power > b.power;中的符号改为 < 号则顶部是最大值

2,栈

头文件#include

形式stack s; stack s;

操作:

  • s.push(item); //将item压入栈顶
  • s.pop(); //删除栈顶的元素,但不会返回
  • s.top(); //返回栈顶的元素,但不会删除
  • s.size(); //返回栈中元素的个数
  • s.empty(); //检查栈是否为空,如果为空返回true,否则返回false

3,队列

头文件#include

形式queue q; queue q;

主要操作:

  • q.push(item) //将item压入队列尾部
  • q.pop() //删除队首元素,但不返回
  • q.front() //返回队首元素,但不删除
  • q.back() //返回队尾元素,但不删除
  • q.size() //返回队列中元素的个数
  • q.empty() //检查队列是否为空,如果为空返回true,否则返回false

4,动态数组

头文件#include

形式vector a; vector a;

常用操作:

  • v1.push_back() //在数组的最后添加一个数据
  • v1.pop_back() //去掉数组的最后一个数据
  • v1.front()  //返回第一个元素(栈顶元素)
  • v1.begin() //得到数组头的指针,用迭代器接受
  • v1.end() //得到数组的最后一个单元+1的指针,用迭代器接受
  • v1.clear() // 移除容器中所有数据
  • v1.empty() //判断容器是否为空
  • v1.erase(pos) //删除pos位置的数据,pos是迭代器
  • v1.erase(beg,end) // 删除[beg,end)区间的数据 ,两个都是是迭代器
  • v1.size() //回容器中实际数据的个数
  • v1.insert(pos,data) //在pos处插入数据

5,双端队列

头文件#include

主要形式: depue deq;

主要操作:

  • deq.assign(n,elem) //赋值n个元素的拷贝给双端队列
  • deq.assign(beg,end) // 赋值一段迭代器的值给双端队列
  • deq.push_front(elem) //添加一个元素在开头
  • deq.push_back(elem) //添加一个元素在结尾
  • deq.pop_front() //删除第一个元素
  • deq.pop_back() //删除最后一个元素
  • deq.at(index) //取固定位置的元素
  • deq[index] //取固定位置的元素
  • deq.front() //返回第一个元素(不检测容器是否为空)
  • deq.back() //返回最后一个元素(不检测容器是否为空

6.双向链表

头文件#include

7,集合set

头文件 #include

set具备的两个特点:

​ set中的元素都是排序好

​ set中的元素都是唯一的,没有重复的

set<int> s;
set<int>::iterator it;   //迭代器

主要操作:

  • begin(); // 返回指向第一个元素的迭代器
  • end(); // 返回指向set的末尾的下一个位置的迭代器
  • clear(); //清空set
  • count(); //返回某个元素的数量(0或1)
  • empty(); //判断set是否为空
  • size(); //返回集合中元素的个数
  • erase(); //删除集合中的元素,迭代器
  • insert(); //在集合中插入元素
  • lower_bound(x); //返回第一个(>=x)的元素的迭代器
  • upper_bound(x); //返回第一个(>x)的元素的迭代器
  • find(x); //返回x的迭代器,若没有则返回 s.end();
    合并两个集合:
    a.insert(b.begin(),b.end());
//set的遍历
set<int> s;
set<int>::iterator it;
for (it = s.begin(); it != s.end(); it++)
	cout << *it << endl;

8,map

头文件:#include

它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,key必须是可以排序的数据结构

map内部数据是有序的,根据key值从小到大排序

map<key,value> m;

例如:
map<int, string> m;//将string映射到int
map<int, long long> m;  //将long long映射到int
map<string,string> fa;   //可以用来表示 字符串并查集

主要操作:

map的插入操作
m.insert(pair<int, string>(1, "str"));//使用insert函数插入pair类型数据
m[1099] = "wwww";       //用下标插入(下标为键值)
m[1] = "sssss";   //覆盖之前的
查找操作:
it = m.find(1);
// find 返回迭代器指向当前查找元素的位置否则返回map::end()位置
删除操作:
erase(key);
m.erase(1);//删除键值为1的数据
int n = m.erase(1099);//如果删除成功饭返回1,否则返回0

主要操作:

  • size(); //返回map的大小
  • m.begin(); //返回第一个值的迭代器
  • m.end(); //返回最后一个值的下一个迭代器
  • m.clear(); //清空
  • m.count(key); //因为key值不会重复出现,只会返回0,1
  • m.empty(); //是否为空
  • lower_bound(); //返回键值 >= 给定元素的第一个位置
  • upper_bound(); //返回键值 > 给定元素的第一个位置
遍历
map<int, string>::iterator it;
for (it = m.begin(); it != m.end(); it++)
	cout << it->second << " " << it->first << endl;

map做并查集

map<string,string> m;

家谱

posted on   naiji  阅读(65)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示