Вы можете быстро начать работать с boost и :: boost :: iterator_facade.
Нет, это было бы неоптимально и не переносимо, и семантика итераторов - это то, что вы должны услышать, как Александреску неожиданно выступил на DevCon. Вы не блокируете контейнер, вы блокируете (и потенциально блокируете и разблокируете) операции. И блокировка операции означает последовательное выполнение, очень простое. Существует множество манипуляций с итераторами, которые будут ненужным наказанием для создаваемой абстракции.
С точки зрения Марса, итератор скрывает указатель и скрывается под полу-ОО-концепцией, которая является такой же вероятностью, как и ОО-распределенная разработка. Я бы точно использовал «процедурный» интерфейс и сделал бы пользователей / сопровождающие обращают внимание на то, почему это необходимо. Операции без блокировки хороши только для «всего параллельного кода», окружающего его. И классические примеры того, как люди продолжают давать повторное изобретение scoped_lock, начиная с кредита 96 года, дают довольно последовательный код.
Или используйте атомарные записи и записи DDJ Саттера в качестве справочной информации о дальнейших действиях бедного человека (и более чем 10-летней неупорядоченности Pentium Pro позже).
(все, что на самом деле происходит, это то, что boost и DDJ работают после поезда .net и MS CCR, который работает после неизменяемости, а также Intel Train, который работает после хорошей OO-подобной абстракции для разработки без блокировок. проблема в том, что это не может быть сделано хорошо, и некоторые люди борются с этим снова и снова, очень похоже на бессмысленную чепуху TBB concurrent_vector. По той же причине исключения никогда не материализуются как не проблемные, особенно в средах, и по той же причине, по которой обработка векторов в ЦП недостаточно используется компиляторами C ++ и т. д. и т. д.)