我目前正在使用c进行编程,我想知道是否有一种过滤数组的智能方法,可以使另一个数组满足某些条件。
一个示例问题是: 给定一个大小为10的随机整数数组,生成一个只包含数组中偶数的数组。
由于很难知道有多少元素满足条件,因此我检查数组两次,一次计算满足条件的元素数,然后实际将相应的元素放入数组中。
我尝试的另一件事是制作一个大小为10的整数数组,在第一次运行时存储满足条件的所有索引,然后在将所需元素复制到数组时读取所需索引数组中的元素。 / p>
一般来说,阵列可能很大,检查条件可能很昂贵,所以我不认为这种方法会很好。
我觉得应该更智能和更好更有效的方法来做到这一点。你能救我一下吗?
答案 0 :(得分:4)
通常,在性能方面,您需要进行速度记忆权衡。
在你的双循环版本中,你牺牲了内存的速度,而在单循环版本中,你牺牲了内存以提高速度。
您可以尝试像每隔这么多元素动态分配空间。例如,你分配5个元素的空间,当它满了你分配另外5个元素,依此类推。不幸的是,动态分配空间可能需要相当长的时间。
我不知道除了你描述的任何其他方法,虽然可能有一些东西。例如,在C ++中,您可以使用向量,该向量会自动调整自身大小以接受类似于我所描述的方法中的新值。
答案 1 :(得分:2)
为int
动态分配内存
每次获得满足条件的元素并将元素添加到动态分配的整数数组中
使用realloc()
增加某些指针所指向的int
数组的大小,并将新元素添加到该数组中。
使用counter来知道数组中元素的数量。