亿些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()

这些都是STL的基本常识了,以后不会再赘述

遍历一个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()

posted @   Jijidawang  阅读(15)  评论(1编辑  收藏  举报  
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示