3 回答

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超6個(gè)贊
it - vec.begin()
正是由于Naveen給出的相反原因,我更喜歡:因此,如果將向量更改為列表,它將不會(huì)編譯。如果您在每次迭代中都這樣做,則很容易最終將O(n)算法轉(zhuǎn)換為O(n ^ 2)算法。
如果您在迭代過(guò)程中沒(méi)有在容器中跳來(lái)跳去,另一種選擇是將索引保留為第二個(gè)循環(huán)計(jì)數(shù)器。
注意:it
是容器迭代器的通用名稱std::container_type::iterator it;
。

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超7個(gè)贊
正如UncleBens和Naveen所表明的,兩者都有充分的理由。哪一個(gè)“更好”取決于您想要的行為:您想保證恒定時(shí)間的行為,還是希望在必要時(shí)回落到線性時(shí)間?
it - vec.begin()
需要花費(fèi)固定的時(shí)間,但是operator -
僅在隨機(jī)訪問(wèn)迭代器上定義,因此,例如,代碼根本不會(huì)使用列表迭代器進(jìn)行編譯。
std::distance(vec.begin(), it)
適用于所有迭代器類型,但僅在隨機(jī)訪問(wèn)迭代器上使用時(shí)才是恒定時(shí)間操作。
誰(shuí)都不是“更好”的人。使用一種可以滿足您需求的工具。
- 3 回答
- 0 關(guān)注
- 1490 瀏覽
添加回答
舉報(bào)