作为一个刚学习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;
撒花!!!