![](/img/trans.png)
[英]No match for “operator-” on reverse_iterator for std::map
[英]Is there a reason to use std::distance() over iterator::operator-()?
我不確定為什么有std::distance(iterator const&, iterator const&)
和iterator::operator-(iterator const&)
(以及適配器operator-(iterator const&, iterator const&)
),其中iterator
是占位符對於任何迭代器。 應該使用一個而不是另一個,如果是,在什么情況下?
operator -
不是大多數迭代器類型的成員,因此除非您的算法僅支持隨機訪問,否則一般使用它是錯誤的。
另一方面, std::distance
知道迭代器類別,並將使用operator -
如果可用,如果不可用,它將使用N
調用operator --
進行減法。
好吧,並非所有迭代器都支持減去兩個迭代器。 對於某些人來說,將違反的性能約束放在一邊甚至沒有意義(它應該是 O(1),而不是 O(n))。 即使是,你為什么認為迭代器是類類型的?
std::distance()
因此回退到迭代,直到距離被覆蓋作為回退,這是一個基本的迭代器操作。
然而,這種退化並不總是可以接受的,如果發生這種情況,距離最好是積極的,因為 UB 的痛苦。
盡管如此,特別是在編寫通用代碼(或以后可能會通用化的代碼)時,保持通用是好的:
寫入接口(您需要的最小接口),而不是實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.