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

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

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

19 ответов

29 просмотров

Генератор? Тогда он будет 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)

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта