假设我有一个包含 m 个元素的向量 v,以及一个名为 i 的随机访问索引。
当我递增索引时,如果超出范围,我想要索引第一个(零)元素。同样地,当我递减索引时,如果索引小于 0,则我想要索引最后一个元素。目前,我只能一次移动一个元素来遍历容器,因此提出了这个函数:
当我递增索引时,如果超出范围,我想要索引第一个(零)元素。同样地,当我递减索引时,如果索引小于 0,则我想要索引最后一个元素。目前,我只能一次移动一个元素来遍历容器,因此提出了这个函数:
unsigned int GetIndexModM(int index,unsigned int m) {return (index + m) % m;}
调用位置可能如下所示:
std::vector<Whatever> v = ... // initialise with 5 elements
unsigned int i = 0;
unsigned int j = GetIndexModM(static_cast<int>(i) - 1,v.size()); // get preceeding index
如果从索引中减去一个大于m的值,那么此函数将失败:
unsigned int j = GetIndexModM(static_cast<int>(i) - 17,v.size()); // oops: returns -2
我的问题是:如何最优雅地实现一个函数,该函数接受任何整数并返回它作为索引的位置?
val = val%mod; return val <0?val + mod:val;
- Mike Seymourval < -mod_val
的情况下是否有效,还是只处理-mod_val < val < 0
的负整数?模数在正数方面正确处理。 - André Caron