我正在学习合并排序算法,当我复制确切的代码时,我收到一个错误“表达式必须具有常量值”,即使它对讲师来说运行没有问题。我同时使用 Visual Studio Code 和 Microsoft Visual Studio。对于 VS Code,它会确认错误,但会运行,但不会在 Microsoft VS 中运行。我尝试在数组声明之前使用 const int ,但它仍然给出错误。我知道我可以使用动态分配和释放,但为什么它对他有效,但对我无效。
void merge(int array[], int leftIndex, int midIndex, int rightIndex) {
int leftArraySize = midIndex - leftIndex + 1;
int rightArraySize = rightIndex - midIndex;
int leftArray[leftArraySize]; // error 1 underlines leftArraySize
int rightArray[rightArraySize]; // error 2 underlines rightArraySize
// rest of the code...
}
变长数组不是 C++ 的标准部分。当您在编译时不知道数组的大小时,请使用动态分配的内存,最好通过
std::vector
而不是原始的 new/delete。
例如
void merge(int array[], int leftIndex, int midIndex, int rightIndex) {
int leftArraySize = midIndex - leftIndex + 1;
int rightArraySize = rightIndex - midIndex;
std::vector<int> leftArray(leftArraySize);
std::vector<int> rightArray(rightArraySize);
// rest of the code...
}