c++ - 模数代码简化

标签 c++

我在 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/

相关文章:

c++ - 有效地计算两个 std::multimap 迭代器之间的条目数

c++ - OpenCV convertTo 是如何转换的?

c++ - 复制构造函数调用 C++

c++ - 并行程序中的 Multimap 或排序 vector

c++ - 将参数正确传递给使用 Qt 的 QProcess 运行的 Linux 二进制文件

c++ - 用于 linux 的 gethostbyname 函数的独立源代码

c++ - 特殊双向关联

c++ - CV_8UC3 和其他类型在 OpenCV 中代表什么?

c++ - 在Boost::Hana中使用BOOST_HANA_DEFINE_STRUCT定义具有40个以上字段的结构

c++ - 为什么我更喜欢使用 vector 到双端队列