c++的set容器如何倒序输出??

作为一个刚学习set的蒟蒻,我在学习set的时候,被set强大好用的功能所震撼,但是我在用set排序然后倒序输出的时候遇到了一些问题:

这是我一开始写的代码:

for( set<int> iterator it=s.end() ; it!=s.begin() ; it--) cout<<*it;

如果有这样用过的小伙伴应该知道会出现什么:

cannot dereference end map/set iterator

那么为什么不能这样写呢? 是因为 set.end()最后指向的是一块空的位置,也就是最后一个元素的后一位, 所以我们是不能输出这个位置的 *it 的.

于是我就想了一个办法:

for( set<int> iterator it= --s.end() ; it!=s.begin() ; it--) cout<<*it;

也就是手动的把指针移到了有元素的位置.物理上的最后一位.

当我们满怀欣喜的输入:6 18 11 13 19 11

我们看见的    输出: 19 18 13 11

原来是我们s.begin() 忽略了,

所以我们只要将结束的指针手动移到最开始的元素的前一位就好了!!

for( set<int> iterator it= --s.end() ; it!=--s.begin() ; it--) cout<<*it;

撒花!!!

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

louisdlee.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值