Вот еще одна вещь о синглетах, о которой еще никто не говорил.
В большинстве случаев «синглтонность» - это деталь реализации некоторого класса, а не характеристика его интерфейса. Обращение Контейнер Контроля может скрыть эту характеристику от пользователей класса; вам просто нужно пометить ваш класс как одиночный (например, с аннотацией @Singleton
в Java) и все; IoCC сделает все остальное. Вам не нужно предоставлять глобальный доступ к вашему экземпляру синглтона, потому что доступ уже управляется IoCC. Таким образом, нет ничего плохого в IoC Singletons.
Предполагается, что GoF Singletons в отличие от IoC Singletons предоставляют «единство» в интерфейсе с помощью метода getInstance (), и поэтому они страдают от всего, что сказано выше.
Он работает, если итератор является итератором с произвольным доступом, каковыми являются итераторы вектора (см. ссылку ). Функцию STL std :: advance
можно использовать для продвижения универсального итератора, но поскольку она не возвращает итератор, я предпочитаю использовать +, если он доступен, потому что он выглядит чище.
C ++ 11 note
Теперь есть std :: next
и std :: prev
, которые действительно возвращают итератор, поэтому, если вы работаете в шаблоне, вы можно использовать их для улучшения универсального итератора и при этом иметь чистый код.
Работает с итераторами произвольного доступа. В общем, вы можете взглянуть на std :: advance , который является более общим. Просто убедитесь, что понимаете последствия использования этого шаблона функции для производительности.