Почему STD :: Contigaging_iterator требует, чтобы тип значения был ссылкой?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему STD :: Contigaging_iterator требует, чтобы тип значения был ссылкой?

Сообщение Anonymous »

Из CppReference: < /p>

Код: Выделить всё

template< class I >
concept contiguous_iterator =
std::random_access_iterator &&
std::derived_from &&
std::is_lvalue_reference_v &&
std::same_as &&
requires(const I& i) {
{ std::to_address(i) } ->
std::same_as;
};
< /code>
У меня есть контейнер, который концептуально похож на вектор байтов (на самом деле это тензор факела), и я хочу предоставить способ итерации по смежным пролетам с фиксированной длиной (также фактически тензоры факела, полученные путем индексации 0'-а-то измерение). Данные сохраняются смежно, и каждый элемент действительно является промежутком, который указывает на фиксированную часть данных контейнера, поэтому я подумал, что смогу реализовать std :: contigage_iterator 
. Но я не уверен, что поместить для приведенных ниже двух типов: < /p>

Код: Выделить всё

class Container : std::vector {
public:
Container(std::vector data, std::size_t chunk_size);

class Iterator {
public:
using difference_type = std::ptrdiff_t;
using value_type = std::span; // A span of length _chunk_size
using pointer = ?;
using reference = ?;
using iterator_concept = std::random_access_iterator_tag;
};

std::size_t _chunk_size;
};
Идеально указатель и ссылка оба будут std :: span в этом упрощенном примере, но это приводит к выходу из строя последних 3 пунктов смежного концепции итератора. Это сработало бы, если бы размер чанка был известен во время компиляции, и мы позволяем value_type = std :: array и pointer = std :: add_pointer_t и ссылка = std :: add_trece_t

Подробнее здесь: https://stackoverflow.com/questions/796 ... -reference
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»