Я создаю тип, который моделирует InputIterator
. В моем приложении «пропустить первые сотни тысяч элементов» - это разумная вещь, и создание value_type
дорого, поэтому я хочу, чтобы мой итератор создал value_type
только при разыменовании, а не при увеличении.Создание InputIterator, который не сохраняет value_type
Я мог бы легко сделать operator*
вернуть значение value_type
. Но я не знаю, что делать с operator->
. Как я могу вернуть указатель, если мой итератор не сохраняет value_type
? Я боюсь жизненных проблем с указателем на временное и не хочу, чтобы меня сожгли.
Я думал об отсутствии operator->
, но тогда у меня не было бы полного InputIterator
.
Почему вы не храните указатель на 'value_type' в своем итераторе и выделяете его только при необходимости? Я имею в виду что-то вроде «ленивой загрузки». – MRB
Вы все равно можете сохранить объект 'value_type', но создать его только после первого разыменования. С чем-то вроде ['std :: optional'] (http://en.cppreference.com/w/cpp/experimental/optional). – BoBTFish
Я нахожусь в C++ 14, поэтому у меня нет 'std :: optional'. Но даже если бы я и сделал, значение_имя велико и сделает итератор большим. –