c++ - 如何制作一个动态大小的数组?动态数组的一般用法(也可能是指针)?

标签 c++ c arrays pointers dynamic

<分区>

我正在尝试制作一个程序

  1. 接受用户输入(假设所有输入都是 int)
  2. 将其存储在没有起始大小的数组中(即不是 -> array[5];);然后
  3. 将存储在阵列中的信息用于任何险恶的目的。

我正在寻求帮助,以便在需要时可以自己学习如何完成此操作。

  • 如何制作没有固定大小的动态数组?
  • 如何使用/访问/获取上述数组中的元素?

阅读对我的解释还不够。

我知道这是一个非常菜鸟的问题,是的,我是菜鸟,但要改变这一点,我需要一些帮助。

最佳答案

对于 C++:

如果您只需要一个容器,只需使用 std:vector。它将处理您所需的所有内存分配。但是,如果您想开发自己的动态容器(无论出于何种原因),则必须自己处理内存分配。也就是说,当您的数组增长时,您必须分配新的内存块,将当前数组值复制到新的内存位置并将新值添加到新分配的内存中。通常将这种逻辑包装在一个单独的类中,例如GrowingArray(类似于标准提供的 vector 类)

编辑

详细说明我的答案(假设您将其用于学习目的):

store it in an array without a starting size (i.e. not -> array[5];)

在这里你想使用这样的东西:int * myDynamicArray; 当用户输入一些值时,您会分配存储这些值的内存块:myDynamicArray = new int[5]; 以及您初始输入的大小。我还建议将数组的大小保存在某个变量中:int arraySize = 5; 如果稍后您想将新值附加到您的 myDynamicArray,首先您必须为增长的数组分配新的内存块(当前数组元素 + 新数组元素)。假设您有 10 个新值。然后你会这样做: int* grownArray = new int[arraySize+10]; 这会为增长的数组分配新的内存块。然后你想将项目从旧内存块复制到新内存块并添加用户附加值(我认为你正在使用它用于学习目的因此我为你提供了简单的复制元素的循环。你可以使用 std: copy 或像 memcopy 一样的 c):

int i = 0;
for (; i < arraySize; ++i)
   {
   grownArray[i] = myDynamicArray [i];
   }
// enlarge newly allocated array:
arraySize+= 10;
for (; i < arraySize; ++i)
   {
   grownArray[i] = newValues from somewhere
   }
// release old memory
delete[] myDynamicArray;
// reassign myDynamicArray pointer to point to expanded array
myDynamicArray = gronwArray;

关于c++ - 如何制作一个动态大小的数组?动态数组的一般用法(也可能是指针)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13431567/

相关文章:

php - 无论 "array-order",MySql 都以相同的顺序显示结果

c++ - Regex C 关于转义字符的帮助

c++ - 多维数组 - malloc 与 new

c - lpthread:编译时警告,执行时奇怪的结果

arrays - Fortran中0大小数组的数组边界

java - 算法复杂度 : Finding the starting index of a sub array in a larger array

c++ - 模板化需求表达式

c++ - 将尾行插入到字符串流中

C - strcmp() 数组中的两个字符串

c - Xcode 无法加载程序?出现错误 : Thread 1: EXC_BAD_ACCESS (code=1, 地址=0x68)