170 похожих чатов

Какие могут быть проблемы если forward iterator не удовлетворяет этому

требованию? https://timsong-cpp.github.io/cppwp/n4861/iterator.requirements#forward.iterators-6
Но объекты *a и *b равны.
Можно ли как то написать forward iterator для последовательности без хранения самой последовательности в памяти.

19 ответов

7 просмотров

Генератор? Тогда он будет input_iterator_tag , а не форвард итератор. Пример - https://devtut.github.io/cpp/iterators.html#write-your-own-generator-backed-iterator

The Pressbraker
Генератор? Тогда он будет input_iterator_tag , а н...

Полухин недавно чекал что нового будет в STD=26. https://habr.com/ru/companies/yandex/articles/753260/

Maus-Grau Автор вопроса
The Pressbraker
Генератор? Тогда он будет input_iterator_tag , а н...

Так я знаю как писать простые итераторы, я хочу написать forward+ итератор для последовательности, которая не хранится в памяти. Для простоты пусть это последовательность целых чисел. Я хочу хранить только текущее число. Т.е. при * возвращать текущее число. А при ++ инкрементировать на 1. Например, хочу сгенерировать последовательность от 0 до 2^1024 для этого понадобится всего 1 число в моем случае, а не весь контейнер из 2^1024 чисел. P.S. в стать не правда Input Iterators : Can be dereferenced only once per position. Can only advance, and only one position at a time. Инпут итератор можно разыменовать сколько угодно раз.

Maus Grau
Так я знаю как писать простые итераторы, я хочу на...

class NonThreadSafeObject { private: mutable std::mutex fMtx{}; SomeInnerDataForManipulations fData{}; public: std::vector<Object> get() const { auto lock = std::lock_guard{fMtx}; ... } Object get(id) const { auto lock = std::lock_guard{fMtx}; ... } void create(Object) { auto lock = std::lock_guard{fMtx}; ... } // etc... }; Да никак не решить элегантно этот вопрос сейчас. Синхронизировать доступ руками - ошибкоопасно и нагружает логикой метод класса. С python-like декоратором этот класс выглядел би более изящнее

Maus Grau
Так я знаю как писать простые итераторы, я хочу на...

https://vk.com/wall-128170344_6349 Галовиц Я. Глава 3 итераторы как раз прям то, что тебе надо (итератор-генератор)

Maus-Grau Автор вопроса
The Pressbraker
https://vk.com/wall-128170344_6349 Галовиц Я. Гла...

Да, действительно тут есть то что мне нужно, но оно реализовано с нарушением стандарта кмк)

https://github.com/microsoft/STL/blob/6c69a73911b33892919ec628c0ea5bbf0caf8a6a/stl/inc/ranges#L1086-L1302

Maus-Grau Автор вопроса
Maus-Grau Автор вопроса

forward+

Maus Grau
forward+

Ну почитайте концепт forward iterator и подстройтесь под него

Maus-Grau Автор вопроса
Maus Grau
Прочитал и никак не сделать)

Ну, все что вам надо: decltype(*i) -> /* can reference(not void) */ weakly_incrementable: std::move_constructible<I> std::is_same_v<decltype(++i), I&> i++ T::difference_type indirectly_readable: T::value_type T::reference T::const_reference std::is_same_v<decltype(*i), T::value_type> std::is_rvalue_reference<decltype(*i)> || std::move_constructible<I> T::value_type& convertible to T::reference T::iterator_category || T::iterator_concept std::is_base_of<std::input_iterator_tag, I> std::is_base_of<std::forward_iterator_tag, I> std::is_default_constructible<I> std::is_move_constructible<I> std::is_copy_constructible<I> std::is_copy_assignable<I> static_cast<bool>(i == i) static_cast<bool>(i != i) std::is_same_v<decltype(i++), I>

Maus-Grau Автор вопроса
다니엘(줄리아)
Ну, все что вам надо: decltype(*i) -> /* can refe...

А это? https://timsong-cpp.github.io/cppwp/n4861/iterator.requirements#forward.iterators-6

Maus-Grau Автор вопроса
다니엘(줄리아)
и это тоже, да забыл

Как это сделать без сохранения все последовательности в памяти?

Maus Grau
Да, действительно тут есть то что мне нужно, но он...

А ты дополнительно просто проверяй, из одной ли ячейки памяти числа, ты же можешь хранить в куче свой счетчик. Если будут два итератора с одинаковым счетчиком, но тем не менее, они будут хранить в разных ячейках, то равенства не будет (ели ты сделаешь такую проверку и вернешь false)

Похожие вопросы

Обсуждают сегодня

Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
Вопрос. Теоретический. Есть список команд. Команды отправляю в обработку некой функции, по очереди. Разные команды могут давать разные результаты после обработки. В зависимос...
Serjone
7
Привет, нужен совет старших товарищей. Есть глобальная переменная var DefaultDataFolder:string; инициализируем DefaultDataFolder:='a:\_OUT\'; есть примитивная процедур...
Max Otto
10
Всем вечера. Подскажите как лучше сделать. делаю на Д10 Например будет база данных на SQLite. в ней будет много таблиц. более 50шт Типа справочник. Содержать ID Name Id p...
Андрей Т 🐎
10
это группа токсиков или тех кто помогает?
Ибрагим
9
Я короче решил скомпилировать Nim в js, я думал он сработает как обычный транслятор. По итогу он мне создал файл с расширением js, и туда поместил кучу кода Вопрос, что это з...
𝕾𝖍𝖆𝖉𝖊 <suspense>
8
мы пытаемся подменить функцию, которая имеет меньше инструкций относительно функции, которой подменяем. https://www.reddit.com/r/jailbreakdevelopers/comments/w06ujy/mshookfun...
Óðinn
6
подскажите пожалуйста, как мне освободить результат записанный в переменную result? в чем проблема подскажите если МОЖЕТЕ?
Михаил Helper
28
Добрый день! Хочу спросить совета. Хочется в скрипт добавить некую конструкцию, что скрипт создал файл, который нужно потом скопировать в определенное место. Нашел такой сп...
Mikhail
4
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Карта сайта