我保持索引計數器應該像循環數組那樣行爲。我強迫大小是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;' –