Код: Выделить всё
#include
#include
#include
namespace r = std::ranges;
namespace rv = std::ranges::views;
std::vector consecutive_triple(int n) {
return { n, n + 1, n + 2 };
}
int main() {
std::vector numbers = { 0, 10, 20, 30, 40 };
auto more_numbers = numbers |
rv::transform(consecutive_triple) | rv::join;
// -- Does this help? ...
//auto more_numbers = numbers |
// rv::transform(consecutive_triple) | rv::join |
// r::to();
for (auto v : more_numbers) {
std::print("{} ", v);
}
std::println("");
return 0;
}
Я считаю, что это связано с неопределенным поведением, поскольку время жизни поддиапазонов заканчивается до того, как объединение сможет их безопасно пройти.
Вопросы:
- Гарантирует ли стандарт C++23 недопустимость/неопределенность этого значения?
- Есть ли какой-нибудь стандартный способ написать это без явного создания контейнера, в котором будут храниться промежуточные векторы перед их объединением?
Подробнее здесь: https://stackoverflow.com/questions/797 ... containers
Мобильная версия