“变量不能用作常量”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 < 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 ++数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章