Меню
Главная
Случайная статья
Настройки
|
C++ Technical Report 1 (TR1) является общим названием для стандарта ISO/IEC TR 19768, библиотеки расширений C++ — это документ с предложением дополнений в стандарт библиотеки C++. Дополнения включают регулярные выражения, умные указатели, хеш-таблицы, и генераторы случайных чисел. TR1 не стандарт, а скорее проект документа. Однако, большинство его предложений стало частью следующего официального стандарта, C++11.
Документ впервые был распространён в виде черновика Draft Technical Report on C++ Library Extensions, затем в 2007 году опубликован как ISO/IEC стандарт под названием ISO/IEC TR 19768:2007.
Содержание
Дополнения, описанные в TR1
Все дополнения, которые описывает TR1, находятся в namespace std::tr1
Общие утилиты- reference_wrapper
- Умные указатели:
Функциональные объекты
Определены в заголовочном файле tr1/functional
- function
- bind
- result_of
- mem_fn
Метапрограммирование и type_traits
Несколько меташаблонов определено в tr1/functional: is_pod, has_virtual_destructor, remove_extent, и другие. Основано на Boost Type Traits.
Генерация случайных чисел
Заголовочный файл tr1/random определяет:
- variate_generator
- mersenne_twister
- poisson_distribution, etc.
Специальные математические функции
Некоторые особенности TR1, такие, как специальные математические функции и некоторые дополнения C99, которые не включены в Visual C++ реализацию TR1.
Данные дополнения не попали в C++11.
- дополнения к
<cmath> /<math.h> файлы заголовков — beta , legendre и т. д.
В следующей таблице приведены все 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
en:Cylindrical Bessel functions of the second kind
|
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
en:Spherical Bessel functions of the second kind
|
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 — это попытка примирить некоторые из различий данных языков путём добавления различных заголовков в следующие библиотеки C++: <complex> , <locale> , <cmath> и т. д. Данные изменения способствуют приведению C++ в соответствие с C99 (не все части C99 включены в TR1).
Techical Report 2
Существовали планы по публикации следующего набора дополнений, C++ Technical Report 2, после стандартизации C++11[1]. Однако впоследствии комитет по стандартизации отказался от TR2 в пользу компактных проблемно-ориентированных спецификаций[2].
Некоторые из предлагаемых расширений:
См. также
Примечания
- TR2 call for proposals (неопр.). Дата обращения: 17 апреля 2013. Архивировано 18 апреля 2013 года.
- TR2 is dead; multiple TR's coming instead (неопр.) (недоступная ссылка — история).
Литература
Ссылки
|
|