“变量不能用作常量”c ++数组[重复]

Posted

技术标签:

【中文标题】“变量不能用作常量”c ++数组[重复]【英文标题】:"Variable cannot be used as a constant" c++ array [duplicate] 【发布时间】:2020-12-12 14:08:57 【问题描述】:

我正在努力使用 C++。我以前学过Java,我认为它更容易,tbh。目前,我正在尝试用 c++ 编写计数排序算法。我想获得我的数组的最大值来声明我的帮助数组,大小 = 最大值 +1;我尝试了几种方法,但没有任何效果。它总是显示“变量不能用作常数”。我还找到了一个与我的代码相同但似乎可以工作的代码。谁能给我一些提示或解决方案?

提前致谢。

#include <iostream>
#include <array>
#include <algorithm>

using namespace std;


int getMax(int arr[], int size) 

    int max = arr[0];

    for (int i = 1; i < sizeof(arr); i++) 
        if (arr[i] > max) 
            max = arr[i];                                   
        
    

    return max;

void countingSort(int *arr, int size)

    int max = getMax(arr, size);
    int hilfsArr[max + 1];


【问题讨论】:

对于动态大小的数组,只需使用std::vector int hilfsArr[max + 1]; 在标准 c++ 中是不合法的。 for (int i = 1; i &lt; sizeof(arr); i++) 也不起作用。 sizeof(arr) 将是指针的大小。有趣的是,您有一个 int size 参数。 getMax 也坏了,sizeof(arr) 应该是size 迁移到第二语言总是很困难,因为你已经养成了使用第一语言但不使用第二语言的习惯。迁移到第三种语言要容易得多,因为您在进行较早的迁移时已经看到了陷阱。 【参考方案1】:

对于动态大小的数组,只需使用std::vector,类似:

void countingSort(int *arr, int size)

    std::vector<int> counter(*std::max_element(arr, arr + size));
    // ...

【讨论】:

【参考方案2】:

您不能将变量用于编译时数组大小,因为编译器无法知道getMax 函数返回的值是什么...

在这种情况下你需要使用动态数组...

void countingSort(int *arr, int size)
    
    int max = getMax(arr, size);
    int *hilfsArr=new int[max + 1]; // allocate

    ... here put the rest of your code for this function

    delete[] hilfsArr; // free before exiting function
    

【讨论】:

请不要教直接动态分配,vector 会这样做。

以上是关于“变量不能用作常量”c ++数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C语言,删除数组中的重复数字然后输出

在c语言中输入数组两个数组,查找重复元素并输出怎么写啊

从c中的struct数组中删除重复名称[重复]

c语言怎么判断两个数组中重复数字的个数?

c语言编程:输出数组中重复出现的数

c语言如何判断一个数组中重复元素的个数,并输出这个个数的值?