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