Как получить доступ к определенному элементу в мультимножестве в c ++? [Дубликат]

Методы внутри org.apache.commons.io.FileUtils также могут быть очень удобными, например :

/**
 * Reads the contents of a file line by line to a List
 * of Strings using the default encoding for the VM.
 */
static List readLines(File file)

1
задан Samaursa 11 January 2012 в 20:12
поделиться

3 ответа

Вы правы; требования для operator+/- заключаются в том, что это операция O(1), которая не может быть выполнена двунаправленными итераторами. std::advance не имеет такого требования к скорости (но будет использовать его, если он доступен, например, для итераторов произвольного доступа).

Обратите внимание, что boost имеет boost::next и boost::prior реализации для итераторов; Я не уверен, каков их статус при стандартизации, но если он находится в режиме форсирования, он прочен.

4
ответ дан fbrereto 19 August 2018 в 11:31
поделиться

Рациональным для std::advance является то, что должно быть очевидно, что вы действительно намеревались использовать его, даже если это не O (1).

t нужно std::deadvance, так как вы можете использовать std::advance с отрицательным расстоянием (для двунаправленных итераторов).

3
ответ дан Bo Persson 19 August 2018 в 11:31
поделиться

Причина, по которой мы имеем std::advance, заключается в том, что она обеспечивает способ продвижения итератора , используя наиболее эффективный способ, поддерживаемый этим итератором .

2
ответ дан NPE 19 August 2018 в 11:31
поделиться
  • 1
    Если двунаправленный итератор имеет перегруженный +/-, то если я нахожу someListItr + 5, это не самый эффективный способ его продвижения (даже если someListItr принадлежит контейнеру с произвольным доступом)? – Samaursa 11 January 2012 в 20:09
Другие вопросы по тегам:

Похожие вопросы: