C++ Technical Report 1
(TR1) является общим названием для стандарта ISO/IEC TR 19768, библиотеки расширений C++ — это документ с предложением дополнений в стандарт библиотеки C++. Дополнения включают
регулярные выражения
,
умные указатели
,
хеш-таблицы
, и
генераторы случайных чисел
. TR1 не стандарт, а скорее проект документа. Однако, большинство его предложений стало частью следующего официального стандарта,
C++11
.
Документ впервые был распространён в виде черновика
, затем в 2007 году опубликован как ISO/IEC стандарт под названием
.
Дополнения, описанные в 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>
файлы заголовков —
,
и т. д.
В следующей таблице приведены все 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) ;
|
|
|
double
cyl_bessel_k
(double nu, double x) ;
|
|
|
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) ;
|
|
|
double
hyperg
(double a, double b, double c, double x) ;
|
|
|
double
laguerre
(unsigned n, double x) ;
|
|
|
double
legendre
(unsigned l, double x) ;
|
|
Дзета-функция Римана
|
double
riemann_zeta
(double x) ;
|
|
|
double
sph_bessel
(unsigned n, double x) ;
|
|
|
double
sph_legendre
(unsigned l, unsigned m, double theta) ;
|
|
|
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++11
. Однако впоследствии комитет по стандартизации отказался от
в пользу компактных проблемно-ориентированных спецификаций
.
Некоторые из предлагаемых расширений:
См. также
Примечания
-
(неопр.)
. Дата обращения: 17 апреля 2013.
18 апреля 2013 года.
-
(неопр.)
.
(недоступная ссылка)
Литература
Ссылки
-
— contains links to the TR1 proposal documents which provide background and rationale for the TR1 libraries.