set函数问题

来源:百度知道 编辑:UC知道 时间:2024/05/30 07:12:14
Sample Input

10 3
1
3
7
6
-1
5
-1
18
9
11
2
-1
4

Sample Output

7
6
18

题目的意思就是一旦遇到-1,就把前面最大的数输出,而且要把它删掉。
#include<iostream>
#include<set>
using namespace std;
int main(void)
{
int n,m,i,t;
multiset<int>se;
while(cin>>n>>m)
for(i=0;i<m+n;i++)
{
cin>>t;
if(t==-1)
{
cout<<*--se.end()<<endl;
se.erase(--se.end());
}
else se.insert(t);
}return 0;
}
这里为什么地址(se.end())要自减呢?而且进过第一次自减后,把它删掉的时候它在自减一次不是删掉那个第二大数的地址了么??求教高手。

end() 是指最后一个位置后面的位置, 这个有点拗口,但你得理解。 它是指向一个恰好越界了的位置,这个位置再前面一个位置就是数组里真正的最后一个值了。
它自减的实际上是 end()返回的这个结果, 所以再调用一次end()它返回的还是应有的结果,而不是减了之后的结果