zoukankan      html  css  js  c++  java
  • stl之set的用法

    1 set介绍
    (1)set是STL中一个很有用的容器,用来存储同一种数据类型的数据结构(可以称之为K的模型,红黑树的啥东西),基本功能与数组相似。
    (2)set与数组不同的是,在set中每个元素的值都是唯一的。
    (3)而且set插入数据时,能够根据元素的值自动进行排序。
    (4)set中数元素的值并不能直接被改变。
    2,简单函数使用。

    begin()        ,返回set容器的第一个迭代器

    end()      ,返回set容器的最后一个迭代器

    clear()          ,删除set容器中的所有的元素

    empty()    ,判断set容器是否为空

    max_size()   ,返回set容器可能包含的元素最大个数

    size()      ,返回当前set容器中的元素个数

    rbegin     ,返回的值和end()相同

    rend()     ,返回的值和rbegin()相同

    count()              ,返回集合中某个值的元素个数。比如count(3),返回集合中值为3的集合的个数。

    其实这东西似乎可以当个看某个值是否有,就是一个看是否被标记过。
    3,实际操作使用案例

    0. 定义一个set容器

    • step1:using namespace std;
    • step2:直接set<成员类型>成员名

    例如:定义一个整型的set容器叫做cc,那么直接set<int> cc就行了

    1. insert操作

    作用:往你定义的set里面加上一个数。

    • step1:定义一个辅助变量tmp;
    • step2:输入tmp;
    • step3:将tmp放进你定义的set容器里面。

    例如:往刚定义的cc里面放一个tmp,那么直接:cc.insert(tmp)即可。


    2. clear操作

    作用:清空你的set容器。

    • step1:将你的set容器清空。

    例如:将刚才定义的cc清空,则为:cc.clear()即可。


    3. empty判断

    作用:判断你的容器是否为空。

    • step1:判断你的容器是否为空。

    例如:判断cc是否为空,只需 if(cc.empty())  即可,判断是否非空,只需if (!cc.empty())。

    额这块解释一下应该,empty()为空的话应该返回的是1,不为空的话返回0.

    我觉得你可以测试下。


    4. size询问

    作用:询问你的容器里有多少个元素。

    例如:询问cc的大小,只需 printf("%d ",cc.size())即可。

    特别的,size返回的是非重复元素,而不是所有元素。

    例如:

    cc里面有{1 2 3 4 5 6 7 8} 8个元素,那么他的返回值是8;

    cc里面有{1 1 1 1 1 1 1 1} 8个元素,那么他的返回值是1;

    cc里面有{1 1 1 2 2 6 2 1} 8个元素,那么他的返回值是3。

    额,这里面不是不允许有重复值嘛。。。

    嗯,我再仔细想了想,值唯一,相同,也似乎并不是没有一样的好像?


    5. begin,end和对set容器的遍历

    这个东西的确有点难……

    首先,如果你要对一个set容器进行遍历的话,你要多开两个迭代器,然后以这两个迭代器分别为头和尾遍历。

    如果你要对cc进行一次遍历输出,下面是具体操作步骤:

    step1:定义两个东西:①set<int>::iterator starti = cc.begin();②set<int>::iterator endi = cc.end();

    step2:进行一次遍历:

    for (;starti!=endi;starti++)
    {
        printf("%d
    ",*starti);
    }

    因为begin()和end()返回的都是第一个或者最后一个元素的地址,所以我们在输出的时候就要加个指针*,表示指向该地址存放的元素。

    当然,begin()和end()还有其它的用处,具体的就在刷题过程中领悟吧。

    重点提示:循环的时候,不能写成starti<=endi,因为这里面没有重载<=的符号,只有!=。


     6. max_size询问

    询问的是这个set容器的最大存放量。

    这东西好像没什么用QAQ……

    首先定义一个叫cc的set容器,然后直接询问cc.max_size()就行啦。

  • 相关阅读:
    雷观(四):手机不可能取代电脑
    小雷FansUnion:我有了第一个付费客户(第一个徒弟)
    小雷FansUnion:我有了第一个付费客户(第一个徒弟)
    博客搬家算法伪码
    博客搬家算法伪码
    MySQL数据库定时自动备份脚本
    Java实现 LeetCode 386 字典序排数
    Java实现 LeetCode 386 字典序排数
    Java实现 LeetCode 386 字典序排数
    Java实现 LeetCode 385 迷你语法分析器
  • 原文地址:https://www.cnblogs.com/beiyueya/p/12034542.html
Copyright © 2011-2022 走看看