为什么我不能访问这个 C++ 数组的大小?

Why can't I access the size of this C++ array?

我是 C++ 的新手,我正在尝试编写一个函数来解决 this 挑战。我的代码如下所示:

#include <iostream>
#include <deque> 
#include <algorithm>
using namespace std;

void printKMax(int arr[], int n, int k){
    deque<int> subarray;
    int i = arr.size();
    int maxValues[n];

    while(i >= 0) { 
        while (subarray.size() < n) {
            subarray.push_back(arr[i]);
            arr.pop();
            --i;
        }
        maxValues.push(max_element(begin(subarray), end(subarray)));
        subarray.pop_front();
    }

    for (array<int>::iterator it=maxValues.begin(); it!=maxValues.end(); 
it++) { 
        cout << maxValues[*it] << " ";
    }

}

int main(){

    int t;
    cin >> t;
    while(t>0) {
        int n,k;
        cin >> n >> k;
        int i;
        int arr[n];
        for(i=0;i<n;i++)
            cin >> arr[i];
        printKMax(arr, n, k);
        t--;
    }
    return 0;
} 

除其他外,此代码抛出一条错误消息:

"request for member ‘size’ in ‘arr’, which is of non-class type ‘int*’ int i = arr.size();"

谁能帮我理解这是什么意思?我是否试图从 class 外部引用某些内容,以便我需要使用指针?数组的声明方式有问题吗?

提前致谢!

C 样式数组不是对象,您不能对其调用 size。它退化为一个指针,如果你在这里传递它

void printKMax(int arr[], int n, int k){

那么这个函数连大小都不知道。要解决这个问题,您需要单独传递大小,作为另一个参数。或者,您可以只使用 std::vector 之类的数据结构,在这种情况下,我建议您不要使用普通数组。你会得到 std::vector<int> arr; 而不是 int arr[n];。然后,您可以在 printKMax 函数中查询 std::vectorsize。访问向量使用与访问数组相同的语法,填充向量的工作方式与您现在的操作方式类似,使用 cin >> arr.

你可以使用这个语句来获取数组的长度

int length = (sizeof(arr)/sizeof(*arr));