我正在编写一个程序来查找序列中的局部极值。从算法的角度来看,这很简单,但是会出现错误:
C2677 бинарный "==": не найден глобальный оператор, принимающий тип "const _Ty" (или приемлемое преобразование отсутствует)
with
[
_Ty=std::_Vector_iterator<std::_Vector_val<std::_Simple_types<int>>>
] Project1 C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.41.34120\include\xutility 6010
我解决问题的完整代码:
#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
vector<int> vec;
int a, b;
cin >> a;
for (int i = 0; i < a; ++i) {
cin >> b;
vec.push_back(b);
}
vector<long long> mins;
vector<long long> maxs;
int cnt_min = 0, cnt_max = 0;
for (int i = 0; i < a; i++) {
if (i == 0) {
if (vec[i] < vec[i + 1]) {
cnt_min++;
mins.push_back(i + 1);
}
else if (vec[i] > vec[i + 1]) {
cnt_max++;
maxs.push_back(i + 1);
}
}
else if (i == vec.size()) {
if (vec[i] < vec[i - 1]) {
cnt_min++;
mins.push_back(i + 1);
}
else if (vec[i] > vec[i - 1]) {
cnt_max++;
maxs.push_back(i + 1);
}
}
else {
if (vec[i - 1] > vec[i] < vec[i + 1]) {
cnt_min++;
mins.push_back(i + 1);
}
else if (vec[i - 1] < vec[i] > vec[i + 1]) {
cnt_max++;
maxs.push_back(i + 1);
}
}
}
cout << cnt_min;
for (int i = 0; i < mins.size(); ++i) {
cout << ' ' << mins[i];
}
cout << "\n" << cnt_max;
for (int i = 0; i < maxs.size(); ++i) {
cout << ' ' << maxs[i];
}
cout << "\n" << vec.end() - find(vec.begin(), vec.end(), min(vec.begin(), vec.end()));
cout << ' ' << vec.end() - find(vec.begin(), vec.end(), max(vec.begin(), vec.end()));
return 0;
}