在c中过滤数组的智能方法

时间:2014-04-21 09:32:26

标签: c arrays performance

我目前正在使用c进行编程,我想知道是否有一种过滤数组的智能方法,可以使另一个数组满足某些条件。

一个示例问题是:   给定一个大小为10的随机整数数组,生成一个只包含数组中偶数的数组。

由于很难知道有多少元素满足条件,因此我检查数组两次,一次计算满足条件的元素数,然后实际将相应的元素放入数组中。

我尝试的另一件事是制作一个大小为10的整数数组,在第一次运行时存储满足条件的所有索引,然后在将所需元素复制到数组时读取所需索引数组中的元素。 / p>

一般来说,阵列可能很大,检查条件可能很昂贵,所以我不认为这种方法会很好。

我觉得应该更智能和更好更有效的方法来做到这一点。你能救我一下吗?

2 个答案:

答案 0 :(得分:4)

通常,在性能方面,您需要进行速度记忆权衡。

在你的双循环版本中,你牺牲了内存的速度,而在单循环版本中,你牺牲了内存以提高速度。

您可以尝试像每隔这么多元素动态分配空间。例如,你分配5个元素的空间,当它满了你分配另外5个元素,依此类推。不幸的是,动态分配空间可能需要相当长的时间。

我不知道除了你描述的任何其他方法,虽然可能有一些东西。例如,在C ++中,您可以使用向量,该向量会自动调整自身大小以接受类似于我所描述的方法中的新值。

答案 1 :(得分:2)

int动态分配内存 每次获得满足条件的元素并将元素添加到动态分配的整数数组中 使用realloc()增加某些指针所指向的int数组的大小,并将新元素添加到该数组中。
使用counter来知道数组中元素的数量。