当索引位于末尾和空数组时,向数组插入元素时出现问题
Issues inserting an element to an array when the index is at the end and an empty array
第一次在这里发布一些东西。希望我做对了。 如果没有,请告诉我。
问题是: 我正在尝试将元素插入给定的数组。
我添加了一个 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...
修改的数组:数组中没有元素。
阿拉伯数字:
初始数组: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
函数来完成这项工作。
- 数组元素打印的递归方法
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 为什么使用数组元素查找最大数字的程序不起作用?
- 数组元素更改值?
- 如何访问宏中定义的数组元素
- 将数组元素递增 1
- C++函数,它将数组、谓词和运算符作为参数,并将运算符应用于满足谓词的数组元素
- 存储指向动态数组元素的指针
- C++通过别名指针以静默方式将错误的类型分配给数组元素
- 在 std::map 中插入数组元素
- 使用指针访问数组元素时出现意外结果
- c++ 使用动态分配运算符反向数组元素
- 为什么在 c++ 中分配 char 数组元素时,分配的字符会被销毁?
- 缺少数组元素问题
- 如何在类中制作 2D 数组元素,然后在其构造函数中指定其维度?
- 创建一个函数来转换数组元素的类型并返回数组的地址
- 删除在结构 c++ 中声明的数组元素
- Getter 和 Setter 用于类 C++ 中的数组元素
- 尝试递归获取数组元素的总和
- 使用SWIG将numpy数组元素(int)传递给c++int