将负索引包裹到数组大小

时间:2017-05-07 03:18:29

标签: c++

给定该数组的长度为size且索引为n的数组,如何将索引包装为始终在size-1之内?对于正数,它只是n % size,但是当n为负数时,如何实现倒退?

我提出了什么:

int wrap(int size, int n) {
    if (n >= 0)
        return n % size;
    else
        return abs(size + n) % size;
}

但这仅适用于n <= size;如何让它适用于任何n

预期产出:

wrap(4, -1) == 3
wrap(4, -2) == 2
wrap(4, -3) == 1
wrap(4, -4) == 0
wrap(4, -5) == 3
wrap(4, -6) == 2
wrap(4, -7) == 1
wrap(5, -8) == 0

1 个答案:

答案 0 :(得分:3)

您希望模运算符具有分区。

int mod_floor(int a, int n) {
    return ((a % n) + n) % n;
}