C++ 如何在cpp中创建动态数组

C++ 如何在cpp中创建动态数组,c++,arrays,C++,Arrays,我有这个功能: void reverse(int* nums, unsigned int size) 此函数用于反转它所获取的数组中的值 现在我想用传入的数组的大小创建另一个数组。将此新数组从原始数组的末尾分配到开始 但是我是C++中的一种新的,所以我不知道如何在函数的参数大小上创建动态数组< /代码>。看看你是否能找到一种方法来解决这个问题,只需重新安排现有的元素 考虑到这似乎是一个带有指针的练习,您可以使用new[]操作符分配空间: int* auxiliaryArray = new in

我有这个功能:

void reverse(int* nums, unsigned int size)
此函数用于反转它所获取的数组中的值

现在我想用传入的数组的大小创建另一个数组。将此新数组从原始数组的末尾分配到开始


<>但是我是C++中的一种新的,所以我不知道如何在函数的参数大小上创建<代码>动态数组< /代码>。看看你是否能找到一种方法来解决这个问题,只需重新安排现有的元素

考虑到这似乎是一个带有指针的练习,您可以使用
new[]
操作符分配空间:

int* auxiliaryArray = new int[size];
然后你可以通过写作来释放它

delete[] auxiliaryArray;

但是,这不是C++中的首选方法。更好的方法是使用

std::vector
,它自己进行内存管理。看起来是这样的:

std::vector<int> auxSpace(size);
std::向量auxSpace(大小);

然后,可以像在实际数组中一样使用方括号访问元素。要做到这一点,您需要将包含在程序的顶部。

实际上不需要在此处分配新数组。看看你是否能找到一种方法来解决这个问题,只需重新安排现有的元素

考虑到这似乎是一个带有指针的练习,您可以使用
new[]
操作符分配空间:

int* auxiliaryArray = new int[size];
然后你可以通过写作来释放它

delete[] auxiliaryArray;

但是,这不是C++中的首选方法。更好的方法是使用

std::vector
,它自己进行内存管理。看起来是这样的:

std::vector<int> auxSpace(size);
std::向量auxSpace(大小);

然后,可以像在实际数组中一样使用方括号访问元素。要做到这一点,您需要在代码的顶部包含<>代码> < /p> > C++中,推荐创建可变大小数组的方法是使用STD::vector < /P>
#include <vector>
void reverse(int* nums, unsigned int size)
{
    std::vector<int> V(size);
    ...
}
#包括
无效反向(整数*nums,无符号整数大小)
{
标准:向量V(大小);
...
}

但这种方法在性能方面并不是最好的,因为它需要根据阵列的大小分配额外的内存,而阵列的大小可能很大。最好从阵列外部开始,逐个交换位于镜像位置的成员(因此,如果大小为5,则交换0和4,然后交换1和3,而不交换2)。这只需要在C++中临时存储一个int ./p>,推荐的创建可变大小数组的方法是使用STD::vector < /P>
#include <vector>
void reverse(int* nums, unsigned int size)
{
    std::vector<int> V(size);
    ...
}
#包括
无效反向(整数*nums,无符号整数大小)
{
标准:向量V(大小);
...
}

但这种方法在性能方面并不是最好的,因为它需要根据阵列的大小分配额外的内存,而阵列的大小可能很大。最好从阵列外部开始,逐个交换位于镜像位置的成员(因此,如果大小为5,则交换0和4,然后交换1和3,而不交换2)。这只需要临时存储单个int。

您无需创建另一个数组即可执行此操作:

void reverse(int* array, const int size){
    for(int i = 0; i < size / 2; i++){
        int tmp = array[i];
        array[i] = array[size - 1 - i];
        array[size - 1 - i] = tmp;
    }
}


int main(){
    int array[] = {1, 3, 5, 7, 9, 11};
    const int size = sizeof(array) / sizeof(array[0]);
    reverse(array, size);

    for(int i(0); i < size; i++)
        std::cout << array[i] << ", ";

}

您无需创建另一个阵列即可执行此操作:

void reverse(int* array, const int size){
    for(int i = 0; i < size / 2; i++){
        int tmp = array[i];
        array[i] = array[size - 1 - i];
        array[size - 1 - i] = tmp;
    }
}


int main(){
    int array[] = {1, 3, 5, 7, 9, 11};
    const int size = sizeof(array) / sizeof(array[0]);
    reverse(array, size);

    for(int i(0); i < size; i++)
        std::cout << array[i] << ", ";

}

如果你想使用一个新的阵列,你可以,但我认为是用大炮杀死苍蝇

看起来你使用的是纯C代码而不是C++。我这么说是因为函数的签名。在一个普通的C++代码中,函数的签名可能类似于其他:

void reverse(标准::向量和项目)

  • 可以使用当前阵列反转当前阵列,而不使用新阵列。您正在传递指向数组第一项的指针,而内容不是常量,因此您可以修改它。更好的函数签名可以是:

    void reverse(int*const nums,const unsigned int size)

  • 看起来像是指针问题。考虑迭代数组位置的边界。您需要迭代整个数组吗?可能只有半个数组?;)

  • 作为奖金跟踪,在没有辅助变量的情况下交换值怎么样?(在我们使用基本类型
    int
    …记住二进制算法的情况下也是如此)



  • 如果你想使用一个新的阵列,你可以,但我认为是用大炮杀死苍蝇

    看起来你使用的是纯C代码而不是C++。我这么说是因为函数的签名。在一个普通的C++代码中,函数的签名可能类似于其他:

    void reverse(标准::向量和项目)

  • 可以使用当前阵列反转当前阵列,而不使用新阵列。您正在传递指向数组第一项的指针,而内容不是常量,因此您可以修改它。更好的函数签名可以是:

    void reverse(int*const nums,const unsigned int size)

  • 看起来像是指针问题。考虑迭代数组位置的边界。您需要迭代整个数组吗?可能只有半个数组?;)

  • 作为奖金跟踪,在没有辅助变量的情况下交换值怎么样?(在我们使用基本类型
    int
    …记住二进制算法的情况下也是如此)



  • int*array=newint[size]为什么需要第二个数组?使用原始数组将其反转到位。如果需要动态数组;只需使用@Raindrop7井,这很粗鲁,但谢谢你的帮助。很抱歉,你听到了这样的评论。那太过分了。我们很乐意帮助您学习如何编程<代码>整数*数组=新整数[大小]为什么需要第二个数组?使用原始数组将其反转到位。如果需要动态数组;只需使用@Raindrop7井,这很粗鲁,但谢谢你的帮助