Код: Выделить всё
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 Код: Выделить всё
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;
};
Подробнее здесь: https://stackoverflow.com/questions/796 ... -reference
Мобильная версия