簡體   English   中英

是否有理由在 iterator::operator-() 上使用 std::distance() ?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM