range-v3

Библиотека для работы с диапазонами (ranges) в C++. Она расширяет стандартную библиотеку шаблонов (STL), делая итераторы и алгоритмы более мощными за счёт их композируемости. Библиотека стала основой для формального предложения по добавлению поддержки диапазонов в стандартную библиотеку C++, которое в итоге вошло в C++20.

Особенности

  • реализация концепции диапазонов как абстракции поверх итераторов;
  • три основные составляющие: представления (views), действия (actions) и алгоритмы (algorithms);
  • поддержка ленивых (lazy) вычислений через композируемые представления;
  • синтаксис конвейеров с использованием оператора | для читаемости кода слева направо;
  • header-only библиотека, не требующая компиляции.

Основные компоненты

Библиотека организована в несколько логических модулей, каждый из которых отвечает за определённый аспект работы с диапазонами (подробнее с документацией можно ознакомиться здесь).

Представления

Представления — это ленивые, невладеющие, немодифицирующие обёртки над последовательностями элементов. Они позволяют комбинировать операции адаптации без немедленного выполнения и без копирования данных. Создание и копирование представлений дёшево.

Основные функции представлений:

  • views::remove_if(pred) — фильтрация элементов по предикату;
  • views::transform(fun) — применение функции к каждому элементу;
  • views::take(n) — ограничение количества элементов;
  • views::ints — генерация бесконечной последовательности целых чисел;
  • views::for_each и yield_from — создание последовательности с помощью comprehension;
  • полный набор адаптеров включает filter, transform, reverse, join, split, zip, stride и многие другие.

Действия

Действия — это энергичные (eager) алгоритмы, которые мутируют контейнер на месте и возвращают его для дальнейших действий. Они также композируются через оператор |.

Основные действия:

  • actions::sort — сортировка контейнера;
  • actions::unique — удаление последовательных дубликатов;
  • actions::push_back — добавление элементов в конец.

Алгоритмы

Range-v3 предоставляет полные реализации всех стандартных алгоритмов с перегрузками, принимающими диапазоны вместо пары итераторов. Это повышает удобство и безопасность кода.

Основные категории алгоритмов:

  • Поисковые/запросные: find, count, equal, mismatch, search;
  • Трансформационные: copy, move, transform, replace, fill, generate;
  • Численные: accumulate, partial_sum, adjacent_difference, iota.

Вспомогательные библиотеки

В состав Range-v3 входят две дополнительные header-only библиотеки:

  • Concepts (CPP): набор макросов для определения и проверки концепций, работающий даже на компиляторах без поддержки C++20 concepts;
  • Meta: небольшая библиотека для метапрограммирования, упрощающая обработку типов и списков типов на этапе компиляции.

Использование в проекте

Документация по использованию Conan-пакетов для разработки приложений для ОС Аврора.

На сервере Conan библиотеки заранее собраны и размещены под различные версии ОС Аврора 4 и ОC Аврора 5. Для данных версий представлены архитектуры armv7hl, aarch64 и x84_64.

Библиотеку можно использовать в проекте с помощью данного conanfile.py

from conan import ConanFile

class Application(ConanFile):
    settings = "os", "compiler", "arch", "build_type"
    generators = "PkgConfigDeps"

    requires = (
        "range-v3/cci.20240905@aurora",
    )    

Процесс локальной сборки описан в документации.

range-v3

Range library for C++14/17/20, basis for C++20's std::ranges
Лицензия
BSL-1.0
Версия
Домашняя страница
Скачать
package
273.76 Kb
MD5: f15cb38041756635edf1d0914db77d92
Updated: 03.09.2025, 17:38:08
Использование в проекте

Мы используем cookies для персонализации сайта и его более удобного использования. Вы можете запретить cookies в настройках браузера.

Пожалуйста ознакомьтесь с политикой использования cookies.