如何在cpp中创建动态数组
how do i create dynamic array in cpp
我有这个函数:
void reverse(int* nums, unsigned int size)
该函数应该反转它正在获取的数组中的值。
现在为了反转,我想用传入的数组的大小创建另一个数组。将这个新数组从原始数组的末尾分配到开头。
但我在C++中是一个新手,所以我不知道如何创建dynamic array
的函数的参数大小。
实际上没有必要在这里分配新的数组。看看是否可以通过重新排列现有元素找到解决此问题的方法。
考虑到这似乎是一个带有指针的练习,您可以使用new[]
运算符来分配空间:
int* auxiliaryArray = new int[size];
然后你可以通过写来释放它
delete[] auxiliaryArray;
然而,这并不是C++中首选的方法。更好的方法是使用std::vector
,它自己进行所有的内存管理。看起来是这样的:
std::vector<int> auxSpace(size);
然后,您可以像在实际数组中一样使用方括号来访问元素。要做到这一点,您需要在程序的顶部使用#include <vector>
。
在C++中,创建可变大小数组的推荐方法是使用std::vector
#include <vector>
void reverse(int* nums, unsigned int size)
{
std::vector<int> V(size);
...
}
但这种方法在性能方面并不是最好的,因为它需要按照阵列的大小分配额外的内存,而阵列的大小可能很大。最好从阵列外部开始,逐个交换位于镜像位置的成员(因此,如果大小为5,则交换0和4,然后交换1和3,不交换2)。这只需要临时存储一个内部
您无需创建另一个数组即可完成此操作:
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] << ", ";
}
正如你在上面的循环中看到的,你只需要用n-1元素交换第一个元素(元素0),用n-1-1和son交换第二个元素…
记住,数组是从0
到n-1
进行索引的。
如果您想分配不实用的新阵列:
int* reverse2(int* array, const int size){
int* tmp = new int[size];
for(int i(size - 1), j(0); j < size; j++, i--)
tmp[j] = array[i];
return tmp;
}
int main(){
int array[] = {1, 3, 5, 7, 9, 11};
for(int i(0); i < size; i++)
std::cout << array[i] << ", ";
std::cout << std::endl;
int* newArray = reverse2(array, size);
for(int i(0) ; i < size; i++)
std::cout << newArray[i] << ", ";
std::cout << std::endl;
delete[] newArray;
return 0;
}
如果你想使用一个新的数组,你可以,但我认为这是用大炮杀死苍蝇。
-
看起来您使用的是纯C代码,而不是C++。我这么说是因为函数的签名。通用C++代码中函数的签名可能与其他类似:
void reverse(std::vector& items);
-
您可以使用当前数组反转当前数组,而不使用新数组。您正在将指针传递到数组的第一个项,并且内容不是恒定的,因此您可以对其进行修改
void reverse(int* const nums, const unsigned int size);
-
看起来像是指针问题。考虑边界来迭代数组的位置。是否需要迭代整个数组?也许只有半阵列?;)
-
作为奖励轨道,在没有辅助变量的情况下交换值怎么样?(在这种情况下,我们使用的是基本类型
int
…记住二进制算术)。
array[pos_head] ^= array[pos_tail];
array[pos_tail] ^= array[pos_head];
array[pos_head] ^= array[pos_tail];
- 如何为 c++ 的不同变量类型的结构元素创建动态数组?
- 当我使用自定义类型创建动态数组时,即使使用字符串,它似乎也不起作用
- 创建动态对象并将其推送到矢量中
- 在创建动态二维数组时,在A[i*c+j]中使用c有什么用,即c代表什么
- 无法在 CMake 中创建动态库并将其链接到另一个动态库?
- 编写所需的代码以创建动态一维整数数组
- 创建动态分配的数组C
- 试图创建动态分配的char数组时的分割故障
- 在 c++ 上创建动态数组时出错
- 使用 MSVC C++编译器创建动态大小的数组
- 问题:在类中创建动态数组
- 如何在C 中创建动态数组,该数组将在执行时决定其大小
- 使用 Cmake 安装时创建动态库
- 为 C 绑定创建动态以 null 结尾的参数
- 如何在C 中创建动态分配的2D结构阵列
- 为矩阵创建动态数组,以循环迭代器命名
- 如何在C 中使用类创建动态列表
- 读取该文件,然后创建动态数组
- 包装本征的张量类以创建动态秩张量?
- 如何在C++中创建动态对象列表