mergesort中有关__mager函数在vs2013中的问题
来源:3-2 归并排序法的实现
miku酱的哲学之路
2018-02-18
源码前部分:
...........
void __mager(T arr[],int L,int mid,int R){
T aux[R-L+1];
..........
}
就这段在编译器提示应输入常量表达式,aux大小未知,不能分配常量大小为0的数组。
数组的维数必须用值大于1的常量表达式。此常量表达式只能包含整型字面常量,枚举常量或用常量表达式初始化的整型const对象。非const变量以及要允许到运行阶段才知道其值的const变量都不能用于此。
我在Dev-C++编译成功,这应该是编译器的问题吧qwq
但怎样在Vs上避免这种问题呢?
谢谢老师,打扰咯~
1回答
-
VS的编译器实现是不完全遵守C++的国际标准的,所以一些语法会和C++11标准有出入。这里就是一种情况:VS是不支持动长数组的:)
课程的官方代码的注释提供了这种方式的修改方案:最简单的就是使用new分配空间,但是不要忘记释放空间哦:)参见这里:https://github.com/liuyubobobo/Play-with-Algorithms/blob/master/03-Sorting-Advance/Course%20Code%20(C%2B%2B)/02-Merge-Sort/main.cpp
对于归并排序,课程的官方代码在这一章最后还给出了一个整体更优的解决方案,将我们的辅助空间一次性在外面开好,传给__merge子过程,这样就不需要在每一次调用__merge的时候进行空间分配了。完全学完归并排序以后,有兴趣可以参考:https://github.com/liuyubobobo/Play-with-Algorithms/blob/master/03-Sorting-Advance/Course%20Code%20(C%2B%2B)/Optional-01-MergeSort-Create-aux-Array-Out-of-Merge/MergeSort2.h
加油:)
222018-02-20
相似问题