代码之家  ›  专栏  ›  技术社区  ›  adam tropp

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

  •  -2
  • adam tropp  · 技术社区  · 6 年前

    我是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;
    } 
    

    这段代码抛出了一个错误,其中包括:

    “请求arr中的成员大小,它是非类类型的 “int*int i=arr.size();”

    有人能帮我理解这意味着什么吗?我是不是想引用类外的内容,所以需要使用指针?数组的声明方式有问题吗?

    提前谢谢!

    2 回复  |  直到 6 年前
        1
  •  1
  •   Blaze    6 年前

    C样式数组不是对象,不能调用 size 关于它。它退化为一个指针,如果你把它传给这里

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

    然后这个函数甚至不知道大小。要解决此问题,需要将大小作为另一个参数单独传递。或者,您可以只使用数据结构,如 std::vector 相反,我建议在这种情况下不要使用普通数组。而不是 int arr[n]; 你会的 std::vector<int> arr; . 然后您可以查询 size STD::载体 在你 printKMax 功能。访问向量使用与访问数组相同的语法,填充向量的工作方式与现在的工作方式类似,使用 cin >> arr .

        2
  •  0
  •   Julian    6 年前

    可以使用此语句获取数组的长度

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