亿些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 @ 2021-07-18 11:30  5k_sync_closer  阅读(13)  评论(1编辑  收藏  举报  来源