在做 B2094 不与最大数相同的数字之和 时候,需要找到序列中的最大值,在访问最大值的时候我原本尝试使用num.end()--,想要得到最大值,编译器并没有报错,但是在运行的时候发生了错误。
最后我用了num.rbegin()反向遍历得到了最后一个数。与此同时我尝试了num.rend()来访问第一个数,也失败了。
有两个疑问:
1.是否是因为set底层结构是用二叉树实现的,而不是线性的,所以不能简单地用++或者——。
2.如果那样不能,那我们应该怎么访问最后一个元素呢(除了反向遍历)?
代码如下,如能帮助,不胜感激
#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
#include <set>
#include <iomanip>
using namespace std;
int main()
{
int a = 0, b = 0, n = 0;
long long sum = 0;
cin >> n;
multiset <int> num;
for (int i = 0; i < n; i++)
{
cin >> a;
num.insert(a);
}
for (multiset<int>::iterator it = num.begin(); it != num.end(); it++)
{
if (*it != *(num.rbegin()))
{
sum += *it;
}
}
cout << sum;
}