我正在遍歷向量,并且需要迭代器當前指向的索引??梢酝ㄟ^兩種方式完成此操作:it - vec.begin()std::distance(vec.begin(), it)這些方法的優缺點是什么?
3 回答

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

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