合并排序 C++ 帮助 为合并的数字动态分配临时数组

Merge sort C++ help Dynamically allocates temporary array for merged numbers

我正在尝试做一道家庭作业,我必须使用教科书合并排序方法并将其实施到我的程序中。当我尝试为合并的数字动态分配临时数组时,我无法让它工作。

void Merge(int *numbers, int i, int j, int k)
{
int mergedSize = k - i + 1;         
int merge2 = k - j;
int mergePos = 0;                       
int leftPos = 0;                       
int rightPos = 0;                     
int mergedNumbers = new int[mergedSize];    
leftPos = i;                        
rightPos = j + 1;     

我收到一个 int 错误,说我无法在 "int mergedNumbers = new int[mergedSize];" 中初始化一个 int 类型的实体。 我该如何解决这个问题才能使其正常工作。

new returns 指向分配数组第一个元素的指针。您正在尝试将其分配给一个 int,这不是一个指针。

您应该将 new 表达式的结果分配给指向 int 的指针:

int* mergedNumbers = new int[mergedSize];

或者更简单,你可以让编译器确定类型,这样你就不必输入两次:

auto mergedNumbers = new int[mergedSize];

但是请注意,mergedNumbers 在任何一种情况下都是一个指针,必须这样使用(例如,使用数组索引语法)。

当您不再需要分配的数组时,不要忘记 delete[] 指针,否则您正在泄漏该内存:

delete[] mergedNumbers;

但是,对于动态大小的临时数组,不会使用手动动态内存,而是会使用 std::vector<int>。对这样的东西使用 new/delete 是不好的风格,因为它容易出错,不是异常安全的,也不遵循 C++ 编程风格的基本概念之一 Resource Acquisition Is Initialization (RAII)

std::vector<int> mergedNumbers(mergedSize);

如果可以就使用它(需要 #include<vector>)。如果你的导师不允许,那将是非常不幸的,因为它会教你一种在实践中不使用的糟糕的 C++ 风格。