gpt4 book ai didi

c++ - 当索引位于末尾且数组为空时,将元素插入数组时出现问题

转载 作者:太空宇宙 更新时间:2023-11-04 12:33:09 27 4
gpt4 key购买 nike

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

问题来了:我正在尝试将一个元素插入到给定的数组中。

我添加了一个 for 循环来检查 numOfElem 是否等于零然后 a[0] 是否等于 elem,但这也没有帮助。

void insertAtIndex(int a[], int numOfElem, int elem, int index)
{
for (int i = numOfElem; i > index; i--)
{
a[i] = a[i-1];
}
a[index] = elem;
numOfElem++;
}

测试用例:

1:

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

2:

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

3

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

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

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

最佳答案

给定的例子有几个问题。

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

最后一个要点是您的程序无法运行的原因。数组索引从 0 开始。因此,如果您有一个包含 3 个元素的数组,则有效索引为 0、1、2。并且不在任何情况下 3.

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

然后,您按值传递参数 numOfElem。意思是,编译器复制这个变量并在函数中使用该拷贝。 numOfElem++; 将在本地拷贝上工作,不会增加变量。一个好的编译器会警告你。此声明是“无操作”。请始终在启用所有警告的情况下进行编译。

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

许多 STL 容器都有 insert 函数来完成这项工作。

关于c++ - 当索引位于末尾且数组为空时,将元素插入数组时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57831784/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com