亿些STL的东西
按照SteelBallRun说的,本文将会介绍set,map,vector和pair
set
set
是按特定顺序存储唯一元素的容器。——C++ Reference
所谓特定顺序
默认为升序。
定义
如果要定义一个存放int的set
set<int> s;
如果要定义降序排列的set
set<int, greater<int> > s;
成员函数
迭代器
begin() | end() | rbegin() | rend() |
---|---|---|---|
开始 | 结束 | 逆序开始 | 逆序结束 |
另外还有几个const版本,需要c++11,用法和上面的一样
begin() | end() | rbegin() | rend() | |
---|---|---|---|---|
const | cbegin() | cend() | crbegin() | crend() |
这些都是
遍历一个set:
for(set<int>::iterator i = s.begin();i != s.end();++i)
更简单的写法:需要c++11
for(auto i = s.begin();i < s.end();++i)
如果不需要更改set,更更简单的写法:仍然需要c++11
for(auto i : s)或者for(auto &i : s)
这两种的区别在于,第一种可以在循环中更改i的值,而第二种不行
因为第二种的i是一个const引用,是set的特性(别的容器不一样)
但无论如何,用哪一种都不能通过i更改s内部的值(要用前两种)
#include <iostream>
#include <set>
using namespace std;
int main()
{
set<int> s;
for(int i = 1;i <= 5;++i) s.insert(i);
for(auto i : s) cout << i << " "; //输出1 2 3 4 5
cout << endl;
for(auto i : s) ++i, cout << i << " "; //输出2 3 4 5 6,但s内部没有改变
cout << endl;
for(auto i = s.begin();i != s.end();++i) cout << *i << " "; //输出1 2 3 4 5,因为s内部没有改变
cout << endl;
for(auto &i : s) ++i, cout << i << " "; //CE!
cout << endl;
for(auto &i : s) cout << i << " "; //没有问题,输出1 2 3 4 5
}
还是常识
s.empty()
:返回s是否为空
s.size()
:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具