【set容器】 赶紧复习啊。

这个set 写的我头皮发麻。

记住几个点:
1. set.end(); 永远都别用,不知道是不是自己机器的问题,一直显示=初识的那个值。 我们要调用最后一个的时候 正确的用法应该是: *(–q.end() ),亲测可用。

  1. lower_bound :
    set::iterator it;
    it=q.lower_bound(pre[x]); it返回的是地址。 取值的话 用一下*就可以了。

3.删除 erase !!!
这个依然不是很懂。 删除单个键值的时候直接用就可以q.erase(it);
但是 如果用q.erase(it,it); 亲测 是不可以用的,不知道有哪些奇怪的错误。

erase(iterator) ,删除定位器iterator指向的值
erase(first,second),删除定位器first和second之间的值
这个显然可以配合 lower_bound,以及upper_bound (顺便复习一下,返回>x的第一个值)

或者 配合 end()?
亲测 : 其区间 应该是[l,r) 所以我们应该配合 end来使用。

int main()
{
    set<int> s;
    set<int>::const_iterator iter;
    set<int>::iterator first;
    set<int>::iterator second;
    for(int i = 1 ; i <= 10 ; ++i)
    {
        s.insert(i);
    }

    first = s.begin();  // 1
    second = s.begin();
    second++;  // 2
    second++;  // 3
    s.erase(first,second);
    for(iter = s.begin() ; iter != s.end() ; ++iter)
        cout<<*iter<<" ";
    cout<<endl;
    return 0;
}

输出:3 4 5 6 7 8 9 10 

改成 s.erase(second,s.end());
输出 1 2 ,证明确实可以配合 end() 一起使用。

erase(key_value),删除键值key_value的值

4.find
it=q.find(x) ,如果没有 会返回 q.end(); 这个end可能是一个莫名其妙的值吧。。。
反正我们认为最后一个是 (–q.end()) 应该就没错。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值