C++ 将负索引换行到数组的大小

C++ 将负索引换行到数组的大小,c++,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您想要的模运算符与floorred除法 int mod_floor(

给定一个长度为
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您想要的模运算符与floorred除法

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

第一个百分比是多余的<代码>(a+n)%n如果a>=-n,则可以正常工作。@Fabian“当a>=-n
时,这是多余的”。谁说的/负数的模运算会导致意外的结果。因此,应该避免这种情况。此外,第一个模运算没有任何好处,应该删除。@Fabian它以什么方式导致意外的结果?结果非常明确。第一个模运算允许函数在
a>=-n
时工作,因此它有一个优点,不应删除。对不起,你是对的!
int mod_floor(int a, int n) {
    return ((a % n) + n) % n;
}