Методы внутри 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)
Вы правы; требования для operator+/-
заключаются в том, что это операция O(1)
, которая не может быть выполнена двунаправленными итераторами. std::advance
не имеет такого требования к скорости (но будет использовать его, если он доступен, например, для итераторов произвольного доступа).
Обратите внимание, что boost имеет boost::next
и boost::prior
реализации для итераторов; Я не уверен, каков их статус при стандартизации, но если он находится в режиме форсирования, он прочен.
Рациональным для std::advance
является то, что должно быть очевидно, что вы действительно намеревались использовать его, даже если это не O (1).
t нужно std::deadvance
, так как вы можете использовать std::advance
с отрицательным расстоянием (для двунаправленных итераторов).
Причина, по которой мы имеем std::advance
, заключается в том, что она обеспечивает способ продвижения итератора , используя наиболее эффективный способ, поддерживаемый этим итератором .
someListItr + 5
, это не самый эффективный способ его продвижения (даже если someListItr
принадлежит контейнеру с произвольным доступом)?
– Samaursa
11 January 2012 в 20:09