• 记set学习


    set即集合,应队长要求,本弱学习一些set的基本操作。

    本弱学习set参考博客:https://blog.csdn.net/qq_42232118/article/details/82021521

    1,使用set需要头文件<set>.

    2,set的定义:set<typename>name,很多容器比如map vector queue都是这样定义的。set里面的元素不可以重复并且会自动按照从小到大排序。假如定义set<int>s;

      不可以重复的意思是如果加入两个相同的元素,set会自动去重。

    3,set元素的访问需要迭代器(本弱不会说迭代器也是今天现学的)

    先来看看我现学的迭代器的知识:

    迭代器分为const_iterator和iterator两种。前者只能是从容器中读元素,而后者不仅可以读还可以改变元素的值。
    定义迭代器it set<int>::iterator it;
    那么元素的值是 *it.(迭代器其实可以理解为地址,*it才是取地址里面的东西)。
    it指代一个位置的话,it++就指向了下一个位置,it--就指向了下一个位置

    set不允许访问*(it+1)这样访问,只能遍历地取,当然遍历地时候我们让it++就可以了。但是set不支持it<s.end()的写法,从头遍历到尾可以这么写:

    for(it=s.begin();it!=s.end();it++)

    在这里解释一下为什么我们不需要最后一个元素,因为容器里面end()返回的是元素最后一位的下一位,也就是end()这个地方是没有元素的。

    4,set常用函数:

      (1)s.insert(x)插入元素x,set会自动按照从小到大排序并去重。

      (2)s.find(x),返回x的值得迭代器,所以要用it=s.find(x),而不能定义int=s.find(x),如果x不存在于set中,会返回s.end();

        (3)s.erase(x) 或  s.erase(s.find(x)),删除元素x。

       (4)s.erase(first,second),删除从first到second-1位置的元素,其中first和second都是迭代器

      (5)s.size()返回set中元素的个数

      (6)s.clear()清空set

    set内部实现是红黑树,所以每次操作大概是logn的复杂度?本弱现在还不清楚。

  • 相关阅读:
    11 改进版通过队列实现一个生产者消费者模型
    13 精进版SVIP版通过队列实现一个生产者消费者模型
    12 再次改进版通过队列实现一个生产者消费者模型
    31 进程
    join方法
    30 进程 线程
    进程传参方式和创建方式2
    设计模式 单例模式
    设计模式 抽象工厂模式
    设计模式 简单工厂模式
  • 原文地址:https://www.cnblogs.com/yuelian/p/12595598.html
Copyright © 2020-2023  润新知