当索引位于结尾且为空数组时,将元素插入数组的问题

时间:2019-09-07 07:54:31

标签: c++

第一次在这里发布内容。希望我做对了。 如果没有,请告诉我。

这是问题所在: 我正在尝试将元素插入给定数组。

我添加了一个for循环,用于检查numOfElem是否等于零,然后a [0]等于elem,但这也无济于事。

let myArray = eval(my_safe_string );

测试用例:

1:

初始数组:数组中没有元素。
在索引0处插入10 ...
修改后的数组:数组中没有元素。

2:

初始数组:1
在索引0处插入20 ...
修改后的数组:20
/ 正如您在此处看到的那样,它在正确的索引上添加了20,但删除了1,而不是将其向右移动。 /

3

初始数组:3 在索引1处插入30 ... 修改后的数组:3 / 它对此测试用例没有任何作用。每当必须添加的元素在末尾时,它都不会添加它,它会返回没有变化的初始数组。 /

总而言之,只要我要插入的元素的索引位于修改后的数组的末尾或该数组为空,就不会对该数组进行任何更改。

任何提示/建议帮助。预先谢谢你。

1 个答案:

答案 0 :(得分:0)

给定示例存在多个问题。

  • 您使用C ++标记了问题,但这是纯C代码(另请参见下文)
  • 您正在使用普通的C样式数组
  • 您应该使用C ++ STL容器
  • 您需要了解如何将参数传递给函数
  • 您需要阅读有关“指针衰减”主题的信息
  • 您必须了解如何计算数组中的索引

最后一个要点是导致您的程序无法运行的原因。数组索引以0开头。因此,如果您的数组包含3个元素,则有效索引为0,1,2。而且在没有情况下也不会3。

因此,如果您的index等于numOfElem,您将使用a[i] = a[i-1];写入越界内存区域。这是一个主要的错误,并可能导致死亡。

然后,按值传递参数numOfElem。这意味着,编译器将为此变量创建一个副本,并在函数中使用该副本。 numOfElem++;将在本地副本上工作,并且不会增加变量。一个好的编译器会警告您。此语句是“无操作”。请始终编译所有警告启用的内容。

我希望但不能看到它,您不希望数组通过增加变量来动态增长。

许多STL容器具有insert函数可以完成这项工作。