Interested Article - C++ Technical Report 1

C++ Technical Report 1 (TR1) является общим названием для стандарта ISO/IEC TR 19768, библиотеки расширений C++ — это документ с предложением дополнений в стандарт библиотеки C++. Дополнения включают регулярные выражения , умные указатели , хеш-таблицы , и генераторы случайных чисел . TR1 не стандарт, а скорее проект документа. Однако, большинство его предложений стало частью следующего официального стандарта, C++11 .

Документ впервые был распространён в виде черновика , затем в 2007 году опубликован как ISO/IEC стандарт под названием .

Дополнения, описанные в TR1

Все дополнения, которые описывает TR1, находятся в namespace std::tr1

Общие утилиты

  • reference_wrapper
  • Умные указатели:
    • shared_ptr
    • weak_ptr

Функциональные объекты

Определены в заголовочном файле 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 . Однако впоследствии комитет по стандартизации отказался от в пользу компактных проблемно-ориентированных спецификаций .

Некоторые из предлагаемых расширений:

См. также

Примечания

  1. . Дата обращения: 17 апреля 2013. 18 апреля 2013 года.
  2. . (недоступная ссылка)

Литература

Ссылки

  • — contains links to the TR1 proposal documents which provide background and rationale for the TR1 libraries.
Источник —

Same as C++ Technical Report 1