我正在编写一个程序来查找序列中的局部极值。从算法的角度来看,这很简单,但是会出现错误:
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;
}
首先...您要从哪种语言转向 C++?就是这个
根本不是你想要的;你想要的写法是这样的:
接下来,在
您正在尝试比较迭代器。如果你想找到最小元素,这就是它的作用
min_element
,顺便说一句,它返回一个迭代器(以防万一,让我提醒你)。第三(这是您问题的答案),您传入与向量的值进行比较的
find
迭代器的值,即类型的值。但是您无法与使用运算符的迭代器进行比较。编译器准确地报告了这一点。find
vec
int
int
==
第四,即使你
find
用正确的调用替换了调用,你想从中得到什么?看一下函数
distance
,这个更正确:)但即使我们承认......但是这里:
你显然需要用括号括住差异......
可能还有更多,但从这些错误开始......