簡體   English   中英

為什么雙向迭代器沒有運算符+/-?

[英]Why is there no operator +/- for a bidirectional iterator?

我自己的理由是,沒有隨機訪問,也沒有辦法知道界限。 但是,為什么我們要使用std::advance呢? [編輯]考慮一下,為什么沒有std::deadvance (因為缺少更好的詞)?

你是對的; operator+/-的要求是它是O(1)操作,雙向迭代器無法滿足。 std::advance沒有這樣的速度要求(但是會在可用時使用它,例如,用於隨機訪問迭代器)。

注意,boost為迭代器提供了boost::nextboost::prior實現; 我不確定他們在標准化方面的地位如何,但是如果它在推動中的確是牢固的。

std::advance的合理性在於,即使它不是O(1),也應該明確地表明您確實打算使用它。

您不需要std::deadvance因為您可以使用負距離的std::advance (對於雙向迭代器)。

我們之所以擁有std::advance是因為它提供了一種使用迭代器支持的最有效方式來推進迭代器的方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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