Описание тега std-ranges

Библиотека для C++20, которая представила пространство имен std::range, состоящее из расширенных алгоритмов из <algorithm> заголовок и адаптеров диапазона, разделенных на представления и действия. </algorithm>
1 ответ

Что за аккуратный способ перебрать целый ряд целых чисел в C++20?

Когда мы хотим перебрать диапазон чисел, от 0 в nмногие (большинство?) из нас пишут: for (int i=0; i &lt; 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&lt;ClusterData&gt; run( const std::vector&lt;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&lt;int&gt; 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 не предоставил версии алгоритмов с диапазоном / ограничениями из &lt;numeric&gt;?

Согласно cppreference, все числовые алгоритмы в заголовке&lt;numeric&gt; не получил rangesверсии на C++20. Есть причины?
09 июл '20 в 17:41
2 ответа

Почему был введен std::range::less?

На cppreference наstd::ranges::less , в примечаниях мы видим, что: В отличие от std::less, std::ranges::less требует всех шести операторов сравнения &lt;, &lt;=, &gt;, &gt;=, == а также != быть действительным (через totally_ordered_with ограничение)…
15 авг '20 в 04:36
1 ответ

Почему const char[] лучше подходит для std::range :: range, чем для явной перегрузки, свободной от const char*, и как это исправить?

Я хотел написать общий &lt;&lt; для любого range и я закончил с этим: std::ostream&amp; operator &lt;&lt; (std::ostream&amp; out, std::ranges::range auto&amp;&amp; range) { using namespace std::ranges; if (empty(range)) { return out &lt;&lt; &quot;[…
1 ответ

Объединение диапазона строк с разделителем с использованием стандартных диапазонов

Я хочу преобразовать четыре байта, содержащиеся в диапазоне, в строку, используя диапазоны. Вот пример ввода и вывода: std::span&lt;std::byte&gt; 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 &lt;std :: string&gt; по длине в C++20?

Я написал код, который сортирует векторные строки по длине. К сожалению, я не уверен, будет ли он работать в следующем стандарте в этой форме. Это правильный код на C++20? #include &lt;algorithm&gt; #include &lt;iostream&gt; #include &lt;string&gt; …
07 мар '20 в 22:50
1 ответ

Использование 'auto [...]' перед вычетом 'auto' с рекурсивным шаблоном функции на основе концепций

Я хотел создать deep_flatten шаблон функции, который создаст range элементов, которые глубоко joinизд. Например, если учесть только вложенныеstd::vectors, я могу иметь: template &lt;typename T&gt; struct is_vector : public std::false_type { }; templ…
04 авг '20 в 17:43
1 ответ

Почему в алгоритмах std::range отсутствуют параллельные перегрузки (принимающие параметр политики выполнения)?

Многие функции в библиотеке алгоритмов C++ имеют перегрузки, принимающие параметр типаExecutionPolicy, например std::copy . Однако я заметил, что соответствующие функции вstd::rangesпространство имен не имеет этих параллельных перегрузок. Это приско…
1 ответ

В чем разница между std :: range :: begin и std :: begin?

В чем разница между std::begin и новый std::ranges::begin ? (то же самое дляend, size, так далее.) Оба, похоже, работают одинаково: #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;array&gt; #include &lt;ranges&gt; template&lt;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 &lt;bool&gt;?

Я заметил, что std::ranges::sort не могу сортировать std::vector&lt;bool&gt; : &lt;source&gt;:6:51: error: no match for call to '(const std::ranges::__sort_fn) (std::vector&lt;bool, std::allocator&lt;bool&gt; &gt;)' 6 | std::ranges::sort(std::vector…
14 авг '20 в 15:17
0 ответов

Почему views::split игнорирует пустой поддиапазон после разделителя, если это последний элемент входного диапазона?

Для следующего кода: #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;ranges&gt; int main() { std::string s = &quot; text &quot;; auto sv = std::ranges::views::split(s, ' '); std::cout &lt;&lt; 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 &lt;typename Range&gt; struct squared_view : std::ranges::view_interface&lt;squared_view&lt;Range&gt;&gt; { 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&lt;int&gt; v(1000*1000); bool count_gt_5_v1(int val){ return std::count(v.begin(), v.end(), val)&gt;5; } Он выглядит лучше, чем необработанный цикл, но может быть очень неэффективным, …
21 июл '20 в 03:31
2 ответа

рекурсивное применение адаптера диапазона C++20 вызывает бесконечный цикл времени компиляции

Библиотека диапазонов в C++20 поддерживает выражение auto view = r | std::views::drop(n); убрать первый n элементы диапазона r с адаптером диапазона drop. Однако, если я рекурсивно отбрасываю элементы из диапазона, компилятор входит в бесконечный ци…
18 май '20 в 13:35