隊列遍歷的代碼還是有點不清楚
?for?(int?i?=?m_iHead;?i?<?m_iQueueLen?+?m_iHead;?i++) { ????cout?<<?m_pQueue[i?%?m_iQueueCapacity]?<<?endl; }
主要是m_iQueueLen + m_iHead和i % m_iQueueCapacity這兩點 求大神講解一下 本人小白
?for?(int?i?=?m_iHead;?i?<?m_iQueueLen?+?m_iHead;?i++) { ????cout?<<?m_pQueue[i?%?m_iQueueCapacity]?<<?endl; }
主要是m_iQueueLen + m_iHead和i % m_iQueueCapacity這兩點 求大神講解一下 本人小白
2017-06-27
舉報
2017-06-28
????假設一種情況,一個m_iQueueCapacity=4的隊列,經過一系列入隊和出對操作,此時m_iHead=3,而m_tail=2,此時在3,0,1位置都有元素。
????此時m_iQueueLen=3。如果是循環是for?(int?i?=?m_iHead;?i?<?m_iQueueLen ;?i++),循環次數m_iQueueLen-m_iHead=0,很明顯循環不能執行。因為我們要循環的次數是m_iQueueLen,也就是3。所以循環次數應該是(m_iQueueLen + m_iHead)-m_iHead=3,也就是i?<?m_iQueueLen?+?m_iHead。
????至于i?%?m_iQueueCapacity,在假設中,我們首先訪問3位置元素,接下要訪問0位置元素了,而i++后此時m_pQueue[i]會訪問4位置元素,而在?m_iQueueCapacity=4隊列里只有0,1,2,3,這幾個位置,所以我們要對i%m_iQueueCapacity取余數,使得我們訪問的位置在m_pQueue[ ]的范圍內,這個余數也是我們訪問完3位置元素的下一個位置0。
????畫一下圖更清楚(這里是順時針隊列)。
????拙見,見笑。