gpt4 book ai didi

c - 排列 C 数组中的元素,因此没有间隙

转载 作者:太空宇宙 更新时间:2023-11-04 03:04:05 24 4
gpt4 key购买 nike

我在 C 中有一个常规的结构数组,在一个每秒运行并更新结构中所有数据的程序中。当满足条件时,其中一个元素将被清除并用作可能随时进入的新元素(在本例中为计时器)的空闲槽。

我所做的只是解析数组的所有元素,寻找需要更新的事件元素。但即使元素的数量很少(<2000),我觉得通过非事件元素也是在浪费时间。有没有一种方法可以使数组保持无间隙,因此我只需要遍历当前分配的元素数?

最佳答案

假设元素的具体顺序无关紧要,这很容易做到。

如果您有数组 A 和事件元素的数量 N,那么您可以像这样添加一个元素 E:

A[N++] = E;

并删除索引 I 处的元素,如下所示:

A[I] = A[--N];

那么这是如何工作的呢?好吧,这很简单。我们希望数组只存储事件元素,所以当我们开始做这些事情时,我们可以假设数组就是这样。

添加一个元素总是将它放在末尾,并且由于当前在数组中的所有元素以及新添加的元素都将处于事件状态,因此我们可以安全地在末尾添加一个。

删除元素是通过移动最后一个元素来接管我们要删除的元素的数组索引来完成的。因此,A[0..I-1] 以及 A[I+1..N] 都处于事件状态,并且通过移动 A[N ]A[I],整个范围 A[0..N-1] 都处于事件状态(A[N] 不活跃,因为它不再存在 - 我们将其移至 A[I],这就是我们将 N 减 1 的原因)。

如果您在删除元素的同时迭代它们以更新它们,请注意您只能在处理没有被删除的元素后增加循环计数器,否则,您永远不会处理移动的元素。

关于c - 排列 C 数组中的元素,因此没有间隙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7897025/

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