2013-11-04 21 views
0

不確定使用哪種語法,速度是最大的問題。運行速度最快的迭代器,用於佔位符

我需要在插入元素後,從0-3增加一個int變量,並加1。

它將用作佔位符,用於比較結構中的插入元素,並將其獲取到需要的位置。

我需要的只是佔位符回到了0-3去,然後循環到0時,它遞增+1從3

佔位符變量可以存儲在類的屬性,我沒有太多的限制,我只想要一個簡單的快速循環迭代器。

這不是一個家庭作業問題。

回答

1

可以使用i = ++i & 3;,或i = ++i % 4;

+0

注(更讀者比EJP):' %'是一個更清晰,更容易修改的操作符。任何合理的現代編譯器都會將'模4'轉換爲'和3',這樣就不會有性能差異(更不用說其他地方會遇到瓶頸了)。 –

+0

@JasonC:不一定。特別是,如果'我'可能是負面的,那不是一個有效的轉換。 –

+0

@LouisWasserman:你是對的。我錯誤地認爲它足夠聰明來分析代碼;但我剛剛證實編譯器爲模和'和'產生了一個'irem',並且熱點沒有進一步的優化(分別產生'idiv'和'和')。 OpenJDK 7.我希望OP不認爲'++ i'比'i = i + 1'快,或者這是他的瓶頸所在。如果是這樣,他會走錯路。 –

0

除非我錯過了什麼,只是使用算術有什麼問題嗎?

int i = 0; 

然後在每個刀片:

i = i + 1; 
if (i == 3) i = 0; 

或者,沒有一個分支:

i = (i + 1) % 4; 

而且,這個增量(無論是分公司,模,或其他)很可能將就瓶頸而言,儘可能減少您的後顧之憂。實施,配置文件,找到實際的瓶頸並在那裏優化。

+0

1'I =(I + 1)%4;'是最優雅的方式做了圓形迭代 –