关于C ++中变量名的困惑

时间:2019-03-07 19:35:21

标签: c++

以下C ++代码在编译时会出现错误:

#include <bits/stdc++.h>
using namespace std;

#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define endl "\n"    

const int N = 5005;

int n, k;
int a[N], prev[N];
int cache[N][N];

int dp(int idx, int take)
{
    if(take < 0)
        return -1e9;
    if(idx == 0)
        return 0;
    int &ans = cache[idx][take];
    if(ans != -1)
        return ans;
    ans = dp(idx - 1, take);
    ans = max(ans, idx - prev[idx] + dp(prev[idx], take - 1));
    return ans;
}   

int32_t main()
{
    IOS;
    memset(cache, -1, sizeof(cache));
    cin>>n>>k;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    sort(a+1, a+n+1);
    int l = 1;
    for(int r=1;r<=n;r++)
    {
        while(a[r] - a[l] > 5)
            l++;
        prev[r] = l - 1;
    }
    int ans = dp(n, k);
    cout<<ans;
    return 0;
}
//AshishGup
  

调用失败[COMPILATION_ERROR]无法编译文件:program.cpp:
  在函数'int dp(int,int)'中:program.cpp:23:23:错误:对   “上一个”不明确
  ans = max(ans,idx-上一个 [idx] + dp(上一个 [idx],   取-1));

,但是只要数组名称从上一个更改为上一个,它就可以正常工作。发生什么事了?

2 个答案:

答案 0 :(得分:4)

using namespace std;

这样做a bad idea,这就是原因。变量prev与标准库函数std::prev之间存在歧义。

此外,您还应该not #include internal compiler headers,例如bits/stdc++.h

答案 1 :(得分:1)

避免将prev名称空间导入全局名称空间。在您的情况下,您导入了std名称空间,并定义了一个名为std::prev的全局变量,该变量现在将与迭代器中定义的{{1}}冲突。 https://en.cppreference.com/w/cpp/iterator/prev