我有一个包含10个元素的数组,我需要将该数组转换为其移动平均值。
每次使用3个元素(例如,索引0-2处的元素的平均值,然后是1-3,依此类推至10的索引,然后返回0和1,以使新数组也具有正好10个元素)。
如果不使用指针来包装数组(环形缓冲区),最好的方法是什么。
答案 0 :(得分:1)
只需做一些边界检查并在代码中包装索引。
下面的示例代码可以提高效率,但为了清晰起见(类似),它是这样编写的。此外,由于我正在键入StackOverflow而不是编译它,因此可能会出现一些小错误。
int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int averages[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
for (int i = 0; i < 10; i++)
{
int a = i;
int b = i + 1 > 9 ? i - 10 + 1;
int c = i + 2 > 9 ? i - 10 + 2;
int count = array[a] + array[b] + array[c];
int average = count / 3; // note this will truncate any decimal part
averages[i] = average;
}