我在 Competitive Programming 2 书中遇到了一些我不太明白的东西。 我很新,试图搜索这个问题,但仍然没有希望,也许我是盲人。
index = (index+1)%n
是对
的简化index++;
if(index>=n){
index=0;
}
这是为什么呢?虽然没有成功。 来源:竞争性编程 2,第 12 页,用于编程中的 c/c++/java 的快捷方式。
最佳答案
这个概念很简单,想想一个长度为 3 的数组(即 n
= 3)。从 0 开始,一路向上:
start calculation next
0 : (0 + 1) % 3 : 1 % 3 : 1
1 : (1 + 1) % 3 : 2 % 3 : 2
2 : (2 + 1) % 3 : 3 % 3 : 0
它所做的是重复遍历长度为n
的数组的索引,你可以用下面的方式使用它
while (!done)
index = (index+1)%n;
//do something
if (itWorked)
done = true;
这可以遍历数组连续执行一些操作,它总是会提供下一个入站索引。
就第二部分而言,这两个代码段是等价的。
0 : ++0 < 3 : true : 1
1 : ++1 < 3 : true : 2
2 : ++2 < 3 : false : 0
所以你可以使用任何一个。当然,第二个更具可读性。
当然,如果 index > n
就不是这种情况,但是,这并不是真正打算使用的方式。
关于c++ - 模数代码简化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24987249/