Описание тега std-ranges
Библиотека для C++20, которая представила пространство имен std::range, состоящее из расширенных алгоритмов из <algorithm> заголовок и адаптеров диапазона, разделенных на представления и действия.
</algorithm>
1
ответ
Что за аккуратный способ перебрать целый ряд целых чисел в C++20?
Когда мы хотим перебрать диапазон чисел, от 0 в nмногие (большинство?) из нас пишут: for (int i=0; i < n; ++i) Но - мне не нравится этот код. Я бы лучше написал что-то вроде for (auto i : magic_goes_here(0,n)) { /* ... */ } с таким же телом петли…
30 авг '19 в 00:26
0
ответов
Не удается назначить преобразование диапазонов в вектор после обновления до VS2019 16.6
Я был на более ранней версии VS2019 (я полагаю, 16.2) и вчера обновился до 16.6, и вдруг рабочий код выдает ошибки компилятора, и я не могу понять, как их исправить. У меня такой код: std::vector<ClusterData> run( const std::vector<PointDat…
28 май '20 в 23:02
4
ответа
Существует ли аналог range::views::group_by, который учитывает все элементы, а не только смежные?
В C++20с std::ranges, мы можем ожидать получения views::group_by 1. Это может быть очень удобно, но я обнаружил проблему во время игры. Из руководства Эрика Ниблера мы можем прочитать, что " По сути,views::group_byгруппирует смежные элементы вместе …
31 окт '19 в 17:48
2
ответа
Объедините несколько адаптеров диапазонов в один диапазон в C++20
Рассмотрим следующий случай: std::vector<int> v{0, 1, 2, 3, 4, 5}; // 0 1 2 3 4 5 auto rng1 = std::views::all(v); // 5 4 3 2 1 0 auto rng2 = std::views::reverse(v); // 4 2 0 auto rng3 = std::views::filter(rng2, [](int x){return x % 2 == 0;}); …
18 июн '20 в 20:55
0
ответов
Почему C++20 не предоставил версии алгоритмов с диапазоном / ограничениями из <numeric>?
Согласно cppreference, все числовые алгоритмы в заголовке<numeric> не получил rangesверсии на C++20. Есть причины?
09 июл '20 в 17:41
2
ответа
Почему был введен std::range::less?
На cppreference наstd::ranges::less , в примечаниях мы видим, что: В отличие от std::less, std::ranges::less требует всех шести операторов сравнения <, <=, >, >=, == а также != быть действительным (через totally_ordered_with ограничение)…
15 авг '20 в 04:36
1
ответ
Почему const char[] лучше подходит для std::range :: range, чем для явной перегрузки, свободной от const char*, и как это исправить?
Я хотел написать общий << для любого range и я закончил с этим: std::ostream& operator << (std::ostream& out, std::ranges::range auto&& range) { using namespace std::ranges; if (empty(range)) { return out << "[…
23 авг '20 в 00:11
1
ответ
Объединение диапазона строк с разделителем с использованием стандартных диапазонов
Я хочу преобразовать четыре байта, содержащиеся в диапазоне, в строку, используя диапазоны. Вот пример ввода и вывода: std::span<std::byte> data{bytes}; // contains 0x11, 0x22, 0x33, 0x44 std::string result = ...; // results in 44:33:22:11 Вот…
28 авг '20 в 18:55
1
ответ
Почему нельзя использовать диапазоны для функциональности библиотеки каналов?
Джонатан Боккара (автор Fluent C++) написал библиотеку под названием pipe. Этот "конвейер", как говорится на главной странице репозитория, не похож на использование диапазонов, хотя он выглядит одинаково: он основан не на ленивом извлечении, а скоре…
05 мар '20 в 19:58
2
ответа
Правильный ли код для сортировки std::vector <std :: string> по длине в C++20?
Я написал код, который сортирует векторные строки по длине. К сожалению, я не уверен, будет ли он работать в следующем стандарте в этой форме. Это правильный код на C++20? #include <algorithm> #include <iostream> #include <string> …
07 мар '20 в 22:50
1
ответ
Использование 'auto [...]' перед вычетом 'auto' с рекурсивным шаблоном функции на основе концепций
Я хотел создать deep_flatten шаблон функции, который создаст range элементов, которые глубоко joinизд. Например, если учесть только вложенныеstd::vectors, я могу иметь: template <typename T> struct is_vector : public std::false_type { }; templ…
04 авг '20 в 17:43
1
ответ
Почему в алгоритмах std::range отсутствуют параллельные перегрузки (принимающие параметр политики выполнения)?
Многие функции в библиотеке алгоритмов C++ имеют перегрузки, принимающие параметр типаExecutionPolicy, например std::copy . Однако я заметил, что соответствующие функции вstd::rangesпространство имен не имеет этих параллельных перегрузок. Это приско…
25 авг '20 в 12:43
1
ответ
В чем разница между std :: range :: begin и std :: begin?
В чем разница между std::begin и новый std::ranges::begin ? (то же самое дляend, size, так далее.) Оба, похоже, работают одинаково: #include <iostream> #include <vector> #include <array> #include <ranges> template<std::ran…
04 июн '20 в 00:48
1
ответ
std::range::sort не может использоваться в качестве функции constexpr при сохранении возвращаемого значения в лямбда-функции
Эта функция f может принимать объекты алгоритма диапазонов C++20 в качестве аргумента, а затем использовать его: constexpr auto f(auto algo) { return [=] { algo(std::array{1, 0}); return true; }(); } и он отлично работает с std::ranges::sort: static…
11 авг '20 в 18:00
1
ответ
Должен ли C++20 std::range::sort не поддерживать std::vector <bool>?
Я заметил, что std::ranges::sort не могу сортировать std::vector<bool> : <source>:6:51: error: no match for call to '(const std::ranges::__sort_fn) (std::vector<bool, std::allocator<bool> >)' 6 | std::ranges::sort(std::vector…
14 авг '20 в 15:17
0
ответов
Почему views::split игнорирует пустой поддиапазон после разделителя, если это последний элемент входного диапазона?
Для следующего кода: #include <iostream> #include <string> #include <ranges> int main() { std::string s = " text "; auto sv = std::ranges::views::split(s, ' '); std::cout << std::ranges::distance(sv.begin(), sv.end(…
20 авг '20 в 06:43
1
ответ
What are the rules for creating your own (pipeable) ranges ::views and ::actions?
In this answer, we can see that we can create our own views. I have tried that: template <typename Range> struct squared_view : std::ranges::view_interface<squared_view<Range>> { struct iterator; constexpr squared_view() = default;…
23 авг '20 в 19:07
3
ответа
C++ std:: string start_with / end_with версии без учета регистра?
В C++20 в std::string добавлены start_with, end_with. Есть хороший способ, чтобы заставить его быть случай в чувствительный? Обратите внимание, что производительность имеет значение, поэтому я не хочу, чтобы обе строки (или std::min(len1, len2) част…
02 сен '20 в 22:03
1
ответ
Могу ли я использовать диапазоны C++20 для разрыва, когда количество совпадений превышает некоторый порог?
Рассмотрим следующий код предварительного диапазона: std::vector<int> v(1000*1000); bool count_gt_5_v1(int val){ return std::count(v.begin(), v.end(), val)>5; } Он выглядит лучше, чем необработанный цикл, но может быть очень неэффективным, …
21 июл '20 в 03:31
2
ответа
рекурсивное применение адаптера диапазона C++20 вызывает бесконечный цикл времени компиляции
Библиотека диапазонов в C++20 поддерживает выражение auto view = r | std::views::drop(n); убрать первый n элементы диапазона r с адаптером диапазона drop. Однако, если я рекурсивно отбрасываю элементы из диапазона, компилятор входит в бесконечный ци…
18 май '20 в 13:35