15-10-2023
C++ Technical Report 1 (TR1) является общим названием для стандарта ISO / IEC TR 19768, библиотеки расширений C++ — это документ с предложением дополнений в стандарт библиотеки С++. Дополнения включают регулярные выражения, умные указатели, хэш-таблицы, и генераторы случайных чисел. TR1 не стандарт, а скорее проект документа. Однако, большинство его предложений, вероятно, станут частью следующего официальный стандарта, C++11. В то же время, производители могут использовать этот документ как руководство по созданию расширений.
Существуют планы по публикации следующего набора дополнений, C++ Technical Report 1, после стандартизации C++11.[1]
Содержание |
Все дополнения, которые описывает TR1, находятся в namespace std::tr1
Определены в заголовочном файле tr1/functional
Несколько меташаблонов определено в tr1/functional: is_pod, has_virtual_destructor, remove_extent, и другие. Основано на Boost Type Traits.
Заголовочный файл tr1/random определяет:
Некоторые особенности TR1, такие, как специальные математические функции и некоторые дополнения C99, которые не включены в Visual C++ реализацию TR1.
Данные дополнения не попали в C++11.
В следующей таблице приведены все 23 специальных функций, описанные в TR1.
Имя функции | Прототип функции | Математическое выражение |
---|---|---|
Обобщённые полиномы Лягерра | double assoc_laguerre(unsigned n, unsigned m, double x) ; | |
Присоединённые многочлены Лежандра | double assoc_legendre(unsigned l, unsigned m, double x) ; | |
Бета-функция | double beta(double x, double y) ; | |
Полный нормальный эллиптический интеграл Лежандра 1-го рода | double comp_ellint_1(double k) ; | |
Полный нормальный эллиптический интеграл Лежандра 2-го рода | double comp_ellint_2(double k) ; | |
Полный нормальный эллиптический интеграл Лежандра 3-го рода | double comp_ellint_3(double k, double nu) ; | |
Вырожденные гипергеометрические функции | double conf_hyperg(double a, double c, double x) ; | |
Регулярные цилиндрические функции Бесселя | double cyl_bessel_i(double nu, double x) ; | |
Цилиндрические функции Бесселя первого рода | double cyl_bessel_j(double nu, double x) ; | |
en:Irregular modified cylindrical Bessel functions | double cyl_bessel_k(double nu, double x) ; | |
en:Cylindrical Neumann functions | double cyl_neumann(double nu, double x) ; | |
Неполный нормальный эллиптический интеграл 1-го рода | double ellint_1(double k, double phi) ; | |
Неполный нормальный эллиптический интеграл 2-го рода | double ellint_2(double k, double phi) ; | |
Неполный нормальный эллиптический интеграл 3-го рода | double ellint_3(double k, double nu, double phi) ; | |
Интегральная показательная функция | double expint(double x) ; | |
Многочлены Эрмита | double hermite(unsigned n, double x) ; | |
en:Hypergeometric series | double hyperg(double a, double b, double c, double x) ; | |
en:Laguerre polynomials | double laguerre(unsigned n, double x) ; | |
en:Legendre polynomials | double legendre(unsigned l, double x) ; | |
Дзета-функция Римана | double riemann_zeta(double x) ; | |
en:Spherical Bessel functions of the first kind | double sph_bessel(unsigned n, double x) ; | |
en:Spherical associated Legendre functions | double sph_legendre(unsigned l, unsigned m, double theta) ; | |
en:Spherical Neumann functions | double sph_neumann(unsigned n, double x) ; |
Каждая функция имеет два дополнительных варианта. Добавление F 'или' L 'суффикс к имени функции дает функцию, которая действует на float или long double значения соответственно. Например:
float sph_neumannf( unsigned n, float x ) ; long double sph_neumannl( unsigned n, long double x ) ;
Тип для кортежей - tuple, основан на Boost Tuple, похож на расширение std:pair для большего числа объектов.
Тип для массивов фиксирвоанной длины - array, основан на Boost Array.
Заголовочные файлы unordered_set, unordered_map. Типы unordered_set, unordered_multiset, unordered_map, unordered_multimap (аналоги set, multiset, map, multimap). Обеспечивают в среднем константное время доступа, но в худшем случае длительность операции будет иметь линейную сложность от количества элементов в контейнере.
Заголовочный файл regex, предоставляет regex, regex_match, regex_search, regex_replace и т.п. Основан на Boost RegEx
Одной из концепций при разработке C++ было обеспечение как можно большей совместимости с языком программирования Си. Однако данная концепция не являлась и не является приоритетной, а лишь настоятельно рекомендованной, а потому C++ нельзя в строгом смысле считать надмножеством Си (стандарты этих языков расходятся). TR1 — это попытка примирить некоторые из различий данных языков путем добавления различных заголовков в следующие библиотеки С++: <complex>
, <locale>
, <cmath>
и т. д. Данные изменения способствуют приведению C++ в соответствие с C99 (не все части C99 включены в TR1).
C++ Technical Report 1.