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

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

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

19 ответов

27 просмотров

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

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

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

Мужики и девушки, привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных...
Kraszx
14
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
как быть с принтером? такой подход прокатит?
zamtmn
12
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
А вот это что за конструкция? Вернее, она тут нафига?
Serjone
10
Привет. Подскажите, как правильно сматчить лист фиксированного размера, чтобы компилятор не говорил мне о неполном паттерне? Допустим что-то такое [x', y'] = sort [x, y]?
Arseny
8
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
Мужики. привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных элементов...
Kraszx
2
Карта сайта