C++ 我收到一个错误,无法将int*转换为int,但我可以';我搞不清楚到底是什么';是什么原因造成的 #包括 使用名称空间std; int main(){ int n; cin>>n; int奶牛[n]; 对于(int i=0;i

C++ 我收到一个错误,无法将int*转换为int,但我可以';我搞不清楚到底是什么';是什么原因造成的 #包括 使用名称空间std; int main(){ int n; cin>>n; int奶牛[n]; 对于(int i=0;i,c++,C++,我收到错误“从int*到int[-fppermission]的转换无效”。然而,我不知道是什么原因造成的,我不知道我在哪里使用了一个int应该指向的指针 (我知道我正在使用一些不推荐使用的东西,例如#include和使用namespace std;,但请先帮助解决错误,然后再告诉我应该更改什么,除非它与错误直接相关)您应该取消对迭代器的引用: lowBound=*下限(cows+j+1,cows+n,2*cows[j]-cows[i]); 上界=*上界(cows+j+1,cows+n,cows[

我收到错误“从int*到int[-fppermission]的转换无效”。然而,我不知道是什么原因造成的,我不知道我在哪里使用了一个int应该指向的指针


(我知道我正在使用一些不推荐使用的东西,例如
#include
和使用namespace std;,但请先帮助解决错误,然后再告诉我应该更改什么,除非它与错误直接相关)

您应该取消对迭代器的引用:

lowBound=*下限(cows+j+1,cows+n,2*cows[j]-cows[i]);
上界=*上界(cows+j+1,cows+n,cows[j]+2*(cows[j]-cows[i]);

as
下限
返回一个迭代器而不是一个值。

您应该取消对迭代器的引用:

lowBound=*下限(cows+j+1,cows+n,2*cows[j]-cows[i]);
上界=*上界(cows+j+1,cows+n,cows[j]+2*(cows[j]-cows[i]);

as
下限
返回一个迭代器而不是一个值。

错误发生在哪一行?
下限
上限
返回迭代器,在您的情况下,迭代器将是指针。但是您正在尝试将这些函数的返回值分配给整数变量。很可能,编译器会告诉您发生错误的确切行号:这可能很有用…您的
使用namespace std与错误相关。我必须检查两次,以确定在你的代码可变长度数组中的哪些是不标准的C++。使用
向量
。错误发生在哪一行?
下限
上限
返回迭代器,在您的情况下,迭代器将是指针。但是您正在尝试将这些函数的返回值分配给整数变量。很可能,编译器会告诉您发生错误的确切行号:这可能很有用…您的
使用namespace std与错误相关。我必须检查两次,以确定在你的代码可变长度数组中的哪些是不标准的C++。改用
向量
。不检查就取消引用会有风险。这两个函数都可以返回数组的结尾。事实上,给定循环中
j
的值,这两个函数都保证在某个点返回
cows+n
。不检查就取消引用是有风险的。这两个函数都可以返回数组的结尾。事实上,给定循环中
j
的值,这两个函数都保证在某个点返回
cows+n
#include <bits/stdc++.h>

using namespace std;

int main() {

    int n; 
    cin >> n;

    int cows[n];
    for (int i = 0; i < n; i++) {
        cin >> cows[i];
    }

    int lowBound;
    int upBound;

    sort(cows, cows + n);

    int ans = 0; 

    for (int i = 0; i < n-2; i++) {
        for (int j = i + 1; j < n-1; j++) {
            lowBound = lower_bound(cows + j + 1, cows + n, 2 * cows[j] - cows[i]);
            upBound = upper_bound(cows + j + 1, cows + n, cows[j] + 2*(cows[j] - cows[i]));
            if (lowBound == 9) {
                continue;
            }
            if (upBound == n) {
                upBound = n - 1;
            }
            ans += upBound - lowBound + 1;
        }
    }

    return 0;
}