gpt4 book ai didi

c - 如何在C中有效地删除静态数组中的元素

转载 作者:太空宇宙 更新时间:2023-11-03 23:23:28 25 4
gpt4 key购买 nike

在 C 编程中,假设我们有一个数组:A[8] = {3, 5, 6, 8, 2, 9, 10, 1},如何通过指数范围?例如,要“删除”从索引 3 到 6 的元素,因为我们有静态数组,在处理之后,我们期望:A[8] = {3, 5, 6, 1, 0, 0, 0, 0

关于处理指定索引处的一个元素:

for(i= index; i< size - 1; i++)
{
A[i] = A[i+ 1];
}
size = size - 1

假设数组大小可能非常大,这个问题的最佳解决方案是什么。

最佳答案

有了数组,你只能复制。您可以逐个元素复制。或者您可以使用允许重叠内存空间的 memmove(memcpy 对于重叠副本不安全)。 memmove 比循环更有效(尽管优化编译器可能会解决这个问题)。您可以使用任一方法复制到临时空间,或复制/移动到位。在任何情况下,您都必须确保您的空单元格已被清除。

        // an example that assumes you have valid index and size
memmove(&A[index], &A[index+1], size-(index+1));
A[--size] = 0;

Big(O) 仍然是 N(与大小成线性关系)。对于非常大的数组,删除的成本会增加。如果 Not Acceptable ,您将需要不同的数据结构。

因此,请考虑您的所有要求,包括插入成本、查找/更改成本以及删除元素的成本。选择您的数据结构以满足您的要求。当数据集较小或事务相对较少时,性能差异可能对您的要求无关紧要。

关于c - 如何在C中有效地删除静态数组中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33146943/

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