我保持索引计数器应该像循环数组那样行为。我强迫大小是2的幂,因此为了使用size_t MASK = size_ - 1
更换模遍历像这样的时候:我该怎么办 - 快速调整两个功率,就像一个快速调整两个++功率一样?
index_ = (++index_) & MASK;
但问题是,在我的情况,我有时意识到我可以再使用该索引下一次我递出在这里,所以出现这种情况时,我有这样的事情:
if (canReuseLastUsedIndex())
--index_;
但随后这个崩溃当最后抛出index_
是零,因为这不环绕到size_
(即MASK+1
)。有没有一个bitop的方式来实现这一点?或者是非常快的东西? (即优选不必说:if (index_) --index_; else index_ = size_
)
留下这样的微优化您优化的编译器(例如'G ++ -O3 -Wall'或'铛++ -O3')。他们会比你做得更好,或者我们能做得更好。 –
你的意思是其他index_ = size_ -1; ...( - index&MASK)will just work –
总是有'index_ =(index_ + MASK)& MASK;' –