Re: iota_view::iterator не двунаправленный
От: Chorkov Россия  
Дата: 20.03.26 10:42
Оценка: 2 (1)
Здравствуйте, sergii.p, Вы писали:

SP>всем привет. Такая проблема.


SP>
SP>const auto fpsRange = std::ranges::iota_view(1, 32);
SP>auto it = fpsRange.begin();
SP>std::advance(it, 100); // Ok
SP>std::advance(it, -10); // UB
SP>


SP>что за фигня? Там же внутри итератора простое число хранится. Почему не разрешить обратный проход?

SP>Или может кто знает, как сделать с минимумом телодвижений двунаправленный. Идея в том, чтобы заработал такой код

SP>
SP>const auto testFps = [](int fps) { return fps < 15; };
SP>auto it = std::ranges::lower_bound(fpsRange, true, std::ranges::less{}, [&](int fps){ return !testFps(fps); });
SP>


SP>Сейчас он уверенно виснет.


На каком компиляторе?

https://godbolt.org/z/YWM4Ya8rh
"У меня все работает".

Можно еще boost.ranges посмотреть.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.