Технический отчет 1 C ++

редактировать

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

Отчет был впервые распространен в виде черновика в 2005 г. как Проект технического отчета о расширениях библиотеки C ++, а затем опубликован в 2007 г. как стандарт ISO / IEC как ISO / IEC TR 19768 : 2007.

Содержание
  • 1 Обзор
  • 2 Компоненты
    • 2.1 Общие утилиты
    • 2.2 Функциональные объекты
    • 2.3 Метапрограммирование и свойства типов
    • 2.4 Числовые возможности
      • 2.4.1 Случайное число поколение
      • 2.4.2 Математические специальные функции
    • 2.5 Контейнеры
      • 2.5.1 Типы кортежей
      • 2.5.2 Массив фиксированного размера
      • 2.5.3 Хеш-таблицы
    • 2.6 Регулярные выражения
    • 2.7 Совместимость с C
  • 3 Технический отчет 2
  • 4 См. Также
  • 5 Ссылки
    • 5.1 Источники
  • 6 Внешние ссылки
Обзор

Компиляторы не должны включать компоненты TR1 чтобы соответствовать стандарту C ++, поскольку предложения TR1 не были частью самого стандарта, а были лишь набором возможных дополнений, которые еще не ратифицировали. Однако большая часть TR1 была доступна из Boost, и несколько распространителей компиляторов / библиотек реализовали все или некоторые компоненты. TR1 - это далеко не полный список дополнений к библиотеке, появившихся в C ++ 11. Например, C ++ 11 включает библиотеку поддержки потоков, которая недоступна в TR1.

Новые компоненты были определены в пространстве имен std::tr1, чтобы отличать их от текущей стандартной библиотеки.

Компоненты

TR1 включает в себя следующие компоненты:

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

Оболочка ссылок - позволяет передавать ссылки, а не копии, в алгоритмы или функциональные объекты. Эта функция была основана на Boost.Ref. Ссылка на оболочку получается из экземпляра класса шаблона reference_wrapper. Ссылки-оболочки аналогичны обычным ссылкам («») языка C ++. Для получения ссылки на оболочку от любого объекта используется шаблонный класс ref(для постоянной ссылки используется cref).

Ссылки на оболочки полезны прежде всего для шаблонных функций, когда вывод аргумента не приводит к ссылке (например, при пересылке аргументов):

#include #include void f (int r) {++ r; } шаблон < class Funct, class Arg>void g (Funct f, Arg t) {f (t); } int main () {int я = 0; г (ж, я); // создается экземпляр 'g < void(int r), int>' std :: cout << i << "\n"; // Output: 0 g( f, std::tr1::ref(i)); // 'g< void(int r), reference_wrapper>'создается экземпляр std :: cout << i << "\n"; // Output: 1 }

Умные указатели - добавляет несколько классов, которые упрощают управление временем жизни объекта в сложных случаях. Добавлены три основных класса:

  • shared_ptr- интеллектуальный указатель с подсчетом ссылок
  • weak_ptr- вариант shared_ptr, который не увеличивает счетчик ссылок

Предложение основано на библиотеке Boost Smart Pointer.

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

Эти четыре модуля добавляются в файл заголовка :

Полиморфная оболочка функции (функция) - может хранить любую вызываемую функцию (указатели функций, указатели функций-членов и объекты функций), которая использует указанную сигнатуру вызова функции. Тип не зависит от типа используемого вызываемого объекта. На основе Boost.Function

Связывания функциональных объектов (bind) - могут связывать любой параметр параметры с функциональными объектами. Допускается также функциональная композиция. Это обобщенная версия стандартных функций связывания std :: bind1stи std :: bind2nd. Эта функция основана на библиотеке Boost Bind.

Типы возвращаемых функций (result_of) - определяет тип выражения вызова.

Функции-члены (mem_fn) - расширение стандартного std :: mem_funи std :: mem_fun_ref. Позволяет обрабатывать указатели на функции-члены как объекты функций. На основе библиотеки Boost Mem Fn.

Метапрограммирование и признаки типов

Теперь существует заголовочный файл , который содержит множество полезных мета-шаблонов признаков, таких как is_pod, has_virtual_destructor, remove_extentи т. Д. Он упрощает метапрограммирование, разрешая запросы и преобразование между различными типами . Предложение основано на библиотеке свойств типа Boost.

Числовые возможности

Генерация случайных чисел

математических специальных функций

Некоторые функции TR1, такие как математические специальные функции и некоторые дополнения C99, не включены в реализацию TR1 Visual C ++. Библиотека специальных математических функций не была стандартизирована в C ++ 11.

  • дополнения к заголовочным файлам /- beta , legendre и т. Д.

Эти функции, вероятно, будут представлять основной интерес для программистов в инженерных и научных областях. дисциплины.

В следующей таблице показаны все 23 специальные функции, описанные в TR1.

Имя функцииПрототип функцииМатематическое выражение
Связанные многочлены Лагерра double assoc_laguerre (без знака n, без знака m, двойной x);L нм (x) = (- 1) mdmdxm L n + m (x), для x ≥ 0 {\ displaystyle {L_ {n}} ^ {m} (x) = (- 1) ^ {m} {\ frac {d ^ {m}} {dx ^ {m}}} L_ {n + m} (x), {\ text {for}} x \ geq 0}{L_ {n}} ^ {m} (x) = (- 1) ^ {m} {\ frac {d ^ {m} } {dx ^ {m}}} L_ {n + m} (x), {\ text {for}} x \ geq 0
Связанные многочлены Лежандра double assoc_legendre (беззнаковый l, беззнаковый m, двойной x);P lm (x) = (1 - x 2) m / 2 dmdxm P l (x), для x ≥ 0 {\ displaystyle {P_ {l}} ^ {m} (x) = (1-x ^ {2}) ^ {m / 2} {\ frac {d ^ {m}} {dx ^ {m}}} P_ {l } (x), {\ text {for}} x \ geq 0}{P_ {l}} ^ {m} (x) = (1-x ^ {2}) ^ {m / 2} {\ frac {d ^ {m}} {dx ^ {m}}} P_ {l} (x), {\ text {for}} x \ geq 0
Бета-функция double beta (double x, double y);B (x, y) Знак равно Γ (x) Γ (y) Γ (x + y) {\ displaystyle \ mathrm {B} (x, y) = {\ frac {\ Gamma (x) \ Gamma (y)} {\ Gamma (x + y)}}}\ mathrm {B} (x, y) = { \ frac {\ Gamma (x) \ Gamma (y)} {\ Gamma (x + y)}}
Полный эллиптический интеграл первого рода double comp_ellint_1 (double k);K (k) = F (k, π 2) = ∫ 0 π 2 d θ 1 - К 2 грех 2 ⁡ θ {\ Displaystyle К (к) = F \ left (k, \ textstyle {\ frac {\ pi} {2}} \ right) = \ int _ {0} ^ {\ frac {\ pi} {2}} {\ frac {d \ theta } {\ sqrt {1-k ^ {2} \ sin ^ {2} \ theta}}}}K (k) = F \ left (k, \ textstyle {\ frac {\ pi} {2}} \ right) = \ int _ {0} ^ {\ frac {\ pi} {2}} {\ frac {d \ theta} {\ sqrt {1-k ^ {2} \ sin ^ {2} \ theta}}}
Полный эллиптический интеграл второго рода double comp_ellint_2 (double k);Е (к, π 2) знак равно ∫ 0 π 2 1 - к 2 грех 2 ⁡ θ d θ {\ displaystyle E \ left (k, \ textstyle {\ frac {\ pi} {2}} \ right) = \ int _ {0} ^ {\ frac {\ pi} {2}} {\ sqrt {1-k ^ {2} \ sin ^ {2} \ theta}} \; d \ theta}E \ left (k, \ textstyle {\ frac {\ pi} {2}} \ справа) = \ int _ {0} ^ {\ frac {\ pi} {2}} {\ sqrt {1-k ^ {2} \ sin ^ {2} \ theta}} \; d \ theta
Завершено эллиптический интеграл третьего рода double comp_ellint_3 (double k, double nu);Π (ν, k, π 2) = ∫ 0 π 2 d θ (1 - ν sin 2 ⁡ θ) 1 - К 2 грех 2 ⁡ θ {\ displaystyle \ Pi \ left (\ nu, k, \ textstyle {\ frac {\ pi} {2}} \ right) = \ int _ {0} ^ {\ frac {\ pi} {2}} {\ frac {d \ theta} {(1- \ nu \ sin ^ {2} \ theta) {\ sqrt {1-k ^ {2} \ sin ^ {2} \ theta}}}}}\ Pi \ left (\ nu, k, \ textstyle {\ frac {\ pi} {2}} \ right) = \ int _ {0} ^ {\ frac { \ pi} {2}} {\ frac {d \ theta} {(1- \ nu \ sin ^ {2} \ theta) {\ sqrt {1-k ^ {2} \ sin ^ {2} \ theta} }}}
Конфлюэнтные гипергеометрические функции double conf_hyperg (double a, double c, double x);F (a, c, x) = Γ (c) Γ (a) ∑ n = 0 ∞ Γ (a + n) xn Γ (c + n) n! {\ Displaystyle F (a, c, x) = {\ frac {\ Gamma (c)} {\ Gamma (a)}} \ sum _ {n = 0} ^ {\ infty} {\ frac {\ Gamma ( a + n) x ^ {n}} {\ Gamma (c + n) n!}}}F (a, c, x) = {\ frac {\ Gamma (c) } {\ Gamma (a)}} \ sum _ {n = 0} ^ {\ infty} {\ frac {\ Gamma (a + n) x ^ {n}} {\ Gamma ( c + n) n!}}
Регулярные модифицированные цилиндрические функции Бесселя double cyl_bessel_i (double nu, double x);I ν (x) = i - ν J ν (ix) = ∑ k = 0 ∞ (x / 2) ν + 2 kk! Γ (ν + k + 1), для x ≥ 0 {\ displaystyle I _ {\ nu} (x) = i ^ {- \ nu} J _ {\ nu} (ix) = \ sum _ {k = 0} ^ {\ infty} {\ frac {(x / 2) ^ {\ nu + 2k}} {k! \; \ Gamma (\ nu + k + 1)}}, {\ text {for}} x \ geq 0 }I _ {\ nu} (x) = i ^ {- \ nu} J _ {\ nu} (ix) = \ sum _ {k = 0} ^ {\ infty} {\ frac {(x / 2) ^ {\ nu + 2k}} {k! \; \ Gamma (\ nu + k + 1)}}, {\ text {для }} x \ geq 0
Цилиндрические функции Бесселя первого рода double cyl_bessel_j (double nu, double x);J ν (x) = ∑ k = 0 ∞ (- 1) k ( x / 2) ν + 2 кк! Γ (ν + k + 1), для x ≥ 0 {\ displaystyle J _ {\ nu} (x) = \ sum _ {k = 0} ^ {\ infty} {\ frac {(-1) ^ {k} \; (x / 2) ^ {\ nu + 2k}} {k! \; \ Gamma (\ nu + k + 1)}}, {\ text {for}} x \ geq 0}J _ {\ nu} (x) = \ sum _ {k = 0} ^ {\ infty} {\ frac {(-1) ^ {k} \; (x / 2) ^ {\ nu + 2k}} {k! \; \ Gamma (\ nu + k + 1)}}, {\ text {for}} x \ geq 0
Неправильно изменено цилиндрические функции Бесселя double cyl_bessel_k (double nu, double x);K ν (x) = π 2 i ν + 1 (J ν (ix) + i N ν (ix)) = {I - ν (x) - I ν (x) sin ⁡ ν π, для x ≥ 0 и ν ∉ Z π 2 lim μ → ν I - μ (x) - I μ (x) sin ⁡ μ π, для x < 0 and ν ∈ Z {\displaystyle {\begin{aligned}K_{\nu }(x)=\textstyle {\frac {\pi }{2}}i^{\nu +1}{\big (}J_{\nu }(ix)+iN_{\nu }(ix){\big)}\\={\begin{cases}\displaystyle {\frac {I_{-\nu }(x)-I_{\nu }(x)}{\sin \nu \pi }},{\text{for }}x\geq 0{\text{ and }}\nu \notin \mathbb {Z} \\[10pt]\displaystyle {\frac {\pi }{2}}\lim _{\mu \to \nu }{\frac {I_{-\mu }(x)-I_{\mu }(x)}{\sin \mu \pi }},{\text{for }}x<0{\text{ and }}\nu \in \mathbb {Z} \\\end{cases}}\end{aligned}}}{\ begin {align} K _ {\ nu} (x) = \ textstyle {\ frac {\ pi} {2}} i ^ {\ nu +1} {\ big (} J _ {\ nu} (ix) + iN _ {\ nu} (ix) {\ big)} \\ = {\ begin {case} \ displaystyle {\ frac {I _ {- \ nu} (x) -I _ {\ nu} (x)} {\ sin \ nu \ pi}}, {\ text { for}} х \ geq 0 {\ текст {и}} \ ню \ notin \ mathbb {Z} \\ [10pt] \ displaystyle {\ frac {\ pi} {2}} \ lim _ {\ mu \ to \ nu} {\ frac {I _ {- \ mu} (x) -I _ {\ mu} (x)} {\ sin \ mu \ pi}}, {\ text {for}} x <0 {\ text {and}} \ nu \ in \ mathbb { Z} \\\ end {case}} \ end {align}}
Цилиндрические функции Неймана

Цилиндрические функции Бесселя второго рода

double cyl_neumann (double nu, double x);N ν (x) = {J ν (x) cos ⁡ ν π - J - ν (x) sin ⁡ ν π, для x ≥ 0 и ν ∉ Z lim μ → ν J μ (x) cos ⁡ μ π - J - μ (x) sin ⁡ μ π, для x < 0 and ν ∈ Z {\displaystyle N_{\nu }(x)={\begin{cases}\displaystyle {\frac {J_{\nu }(x)\cos \nu \pi -J_{-\nu }(x)}{\sin \nu \pi }},{\text{for }}x\geq 0{\text{ and }}\nu \notin \mathbb {Z} \\[10pt]\displaystyle \lim _{\mu \to \nu }{\frac {J_{\mu }(x)\cos \mu \pi -J_{-\mu }(x)}{\sin \mu \pi }},{\text{for }}x<0{\text{ and }}\nu \in \mathbb {Z} \\\end{cases}}}N _ {\ nu} (x) = {\ begin { case} \ displaystyle {\ frac {J _ {\ nu} (x) \ cos \ nu \ pi -J _ {- \ nu} (x)} {\ sin \ nu \ pi}}, {\ text {for} } x \ geq 0 {\ text {and}} \ nu \ notin \ mathbb {Z} \\ [10pt] \ displaystyle \ lim _ {\ mu \ to \ nu} {\ frac {J _ {\ mu} (x) \ cos \ mu \ pi -J _ {- \ mu} (x)} {\ sin \ mu \ pi}}, {\ text {for}} x <0 {\ text {and}} \ nu \ in \ mathbb {Z} \\\ конец {случаи}}
Неполный эллиптический интеграл первого рода double ellint_1 (double k, double phi);F (k, ϕ) = ∫ 0 ϕ d θ 1 - k 2 sin 2 ⁡ θ, для | k | ≤ 1 {\ Displaystyle F (к, \ phi) = \ int _ {0} ^ {\ phi} {\ frac {d \ theta} {\ sqrt {1-k ^ {2} \ sin ^ {2} \ theta}}}, {\ text {for}} \ left | k \ right | \ leq 1}F (k, \ phi) = \ int _ {0} ^ {\ phi} {\ frac { d \ theta} {\ sqrt {1-k ^ {2} \ sin ^ {2} \ theta}}}, {\ text {for}} \ left | k \ right | \ leq 1
Неполный эллиптический интеграл второго рода double ellint_2 (double k, double phi);E (k, ϕ) = ∫ 0 ϕ 1 - k 2 sin 2 ⁡ θ d θ, для | k | ≤ 1 {\ Displaystyle \ Displaystyle E (к, \ phi) = \ int _ {0} ^ {\ phi} {\ sqrt {1-k ^ {2} \ sin ^ {2} \ theta}} d \ theta, {\ text {for}} \ left | k \ right | \ leq 1}\ displaystyle E (k, \ phi) = \ int _ {0} ^ {\ phi} {\ sqrt {1-k ^ {2} \ sin ^ {2 } \ theta}} d \ theta, {\ text {for}} \ left | k \ right | \ leq 1
Неполный эллиптический интеграл третьего рода double ellint_3 (double k, double nu, double phi) ;Π (k, ν, ϕ) = ∫ 0 ϕ d θ (1 - ν sin 2 ⁡ θ) 1 - k 2 sin 2 θ, для | k | ≤ 1 {\ displaystyle \ Pi (к, \ nu, \ phi) = \ int _ {0} ^ {\ phi} {\ frac {d \ theta} {\ left (1- \ nu \ sin ^ {2} \ theta \ right) {\ sqrt {1-k ^ {2} \ sin ^ {2} \ theta}}}}, {\ text {for}} \ left | k \ right | \ leq 1}\ Pi (k, \ nu, \ phi) = \ int _ {0} ^ {\ phi} {\ frac {d \ theta} {\ left (1- \ nu \ sin ^ {2} \ theta \ right) {\ sqrt {1-k ^ {2} \ sin ^ {2} \ theta}}}}, {\ text {for}} \ left | k \ right | \ leq 1
Экспоненциальный интеграл double expint (double x);E i (x) = - ∫ - x ∞ e - ttdt {\ displaystyle {\ t_dv {E}} i (x) = - \ int _ {- x} ^ {\ infty} {\ frac {e ^ {- t}} {t}} \, dt}{\ t_dv {E}} i (x) = - \ int _ {- x} ^ {\ infty} {\ frac {e ^ {- t}} {t}} \, dt
Многочлены Эрмита double hermite (без знака n, двойной x);H n (x) = (- 1) nex 2 dndxne - x 2 {\ displaystyle H_ {n} (x) = (- 1) ^ {n} e ^ {x ^ { 2}} {\ frac {d ^ {n}} {dx ^ {n}}} e ^ {- x ^ {2}} \, \!}H_ {n} (x) = (- 1) ^ {n} e ^ {x ^ {2}} {\ frac {d ^ {n}} {dx ^ {n}}} e ^ {- x ^ { 2}} \, \!
Гипергеометрический ряд двойной hyperg (double a, double b, double c, double x);F (a, b, c, x) = Γ (c) Γ (a) Γ (b) ∑ n = 0 ∞ Γ (a + n) Γ (b + n) Γ (c + n) xnn! {\ Displaystyle F (a, b, c, x) = {\ frac {\ Gamma (c)} {\ Gamma (a) \ Gamma (b)}} \ sum _ {n = 0} ^ {\ infty} {\ frac {\ Gamma (a + n) \ Gamma (b + n)} {\ Gamma (c + n)}} {\ frac {x ^ {n}} {n!}}}F ( a, b, c, x) = {\ frac {\ Gamma (c)} {\ Gamma (a) \ Gamma (b)}} \ sum _ {n = 0} ^ {\ infty} {\ frac {\ Гамма (a + n) \ Gamma (b + n)} {\ Gamma (c + n)}} {\ frac {x ^ {n}} {n!}}
Многочлены Лагерра double laguerre (без знака n, double x);L n (x) = exn! dndxn (xne - x) для x ≥ 0 {\ displaystyle L_ {n} (x) = {\ frac {e ^ {x}} {n!}} {\ frac {d ^ {n}} {dx ^ {n}}} \ left (x ^ {n} e ^ {- x} \ right), {\ text {for}} x \ geq 0}L_ {n} (x) = {\ frac {e ^ {x}} {n!}} {\ frac {d ^ {n}} {dx ^ {n}}} \ left (x ^ {n} e ^ {- x} \ right), {\ text {for}} x \ geq 0
многочлены Лежандра double legendre (беззнаковый l, двойной x);P l (x) = 1 2 ll! d l d x l (x 2 - 1) l, для | х | ≤ 1 {\ displaystyle P_ {l} (x) = {1 \ over 2 ^ {l} l!} {D ^ {l} \ over dx ^ {l}} (x ^ {2} -1) ^ { l}, {\ text {for}} \ left | x \ right | \ leq 1}P_ {l} (x) = {1 \ over 2 ^ {l} l!} {D ^ {l} \ over dx ^ {l}} (x ^ {2} -1) ^ {l}, {\ text {for}} \ left | x \ right | \ leq 1
дзета-функция Римана double riemann_zeta (double x);Z (x) = {∑ k = 1 ∞ k - x, для x>1 2 x π x - 1 sin ⁡ (x π 2) Γ (1 - x) ζ (1 - x), для x < 1 {\displaystyle \mathrm {Z} (x)={\begin{cases}\displaystyle \sum _{k=1}^{\infty }k^{-x},{\text{for }}x>1 \\ [ 10pt] \ displaystyle 2 ^ {x} \ pi ^ {x-1} \ sin \ left ({\ frac {x \ pi} {2}} \ right) \ Gamma (1-x) \ zeta (1-x), {\ text {for}} x <1\\\end{cases}}}\mathrm {Z} (x)={\begin{cases}\displaystyle \sum _{k=1}^{\infty }k^{-x},{\text{for }}x>1 \\ [10pt] \ displaystyle 2 ^ {x} \ pi ^ {x-1} \ sin \ left ({\ frac {x \ pi} {2 }} \ right) \ Gamma (1-x) \ zeta (1-x), {\ text {for}} x <1\\\end{cases}}
Сферические функции Бесселя первого рода double sph_bessel (беззнаковый n, двойной x);jn (x) = π 2 x J n + 1/2 (x), для x ≥ 0 {\ displaystyle j_ {n} (x) = {\ sqrt {\ frac {\ pi} {2x}}} J_ {n + 1/2} (x), {\ text {for}} x \ geq 0}j_ {n} (x) = {\ sqrt {\ frac {\ pi} {2x}}} J_ {n + 1/2} (x), {\ text {for}} х \ geq 0
Сферические связанные функции Лежандра double sph_legendre (без знака l, без знака m, двойная тета);Y lm (θ, 0), где Y lm (θ, ϕ) = (- 1) m [(2 l + 1) 4 π (l - m) ! (л + м)! ] 1 2 P l m (cos ⁡ θ) e i m ϕ, для | м | ≤ l {\ displaystyle Y_ {l} ^ {m} (\ theta, 0) {\ text {where}} Y_ {l} ^ {m} (\ theta, \ phi) = (- 1) ^ {m} \ left [{\ frac {(2l + 1)} {4 \ pi}} {\ frac {(lm)!} {(l + m)!}} \ right] ^ {1 \ over 2} P_ {l } ^ {m} (\ cos \ theta) e ^ {\ mathrm {i} m \ phi}, {\ text {for}} | m | \ leq l}Y_ {l} ^ {m} (\ theta, 0) {\ text {where}} Y_ {l} ^ {m} (\ theta, \ phi) = (- 1) ^ {m} \ left [{\ frac {(2l + 1)} {4 \ pi }} {\ frac {(lm)!} {(l + m)!}} \ right] ^ {1 \ over 2} P_ {l} ^ {m} (\ cos \ theta) e ^ {\ mathrm { i} m \ phi}, {\ text {for}} | m | \ leq l
Сферические функции Неймана

Сферические функции Бесселя второго рода

double sph_neumann (unsigned n, double x);nn (x) = (π 2 x) 1 2 N n + 1 2 (x), для x ≥ 0 {\ displaystyle n_ {n} (x) = \ left ({\ frac {\ pi} {2x}} \ right) ^ {\ frac {1} {2}} N_ {n + {\ frac {1} { 2}}} (x), {\ text {for}} x \ geq 0}n_ {n} ( x) = \ left ({\ frac {\ pi} {2x}} \ right) ^ {\ frac {1} {2}} N_ {n + {\ frac {1} {2}}} (x), { \ text {for}} x \ geq 0

У каждой функции есть два дополнительных варианта. Добавление суффикса «f » или «l » к имени функции дает функцию, которая работает со значениями floatили long doubleсоответственно.. Например:

float sph_neumannf (unsigned n, float x); длинный двойной sph_neumannl (беззнаковый n, длинный двойной x);

Контейнеры

Типы кортежей

  • новый файл заголовка - кортеж
  • на основе библиотеки Boost Tuple
  • , неявно расширение стандартного std :: pair
  • коллекция элементов фиксированного размера, которые могут быть разных типов

массив фиксированного размера

  • новый заголовочный файл - массив
  • взят из библиотеки Boost Array
  • в отличие от типов динамических массивов, таких как стандартные std :: vector

Хеш-таблицы

  • new , <unordered_map >файлы заголовков
  • они реализуют классы unordered_set, unordered_multiset, unordered_mapи unordered_multimap, аналогично set, multiset, mapи multimap, соответственно
    • , к сожалению, unordered_setи unordered_multisetнельзя использовать с set_union, set_intersection, set_difference, set_symmetric_differenceи включает стандартные библиотечные функции, которые работают для setи multiset
  • , новая реализация, не полученная из существующей библиотеки, не полностью совместимая с API существующими библиотеками
  • как все хеш-таблицы, часто обеспечивают постоянное время поиск элементов, но в худшем случае может быть линейным по размеру контейнера

Регулярные выражения

  • новый файл заголовка - регулярное выражение, regex_match, regex_search, regex_replaceи т. Д.
  • на основе библиотеки Boost RegEx
  • библиотеки сопоставления с образцом

Совместимость с C

C ++ разработан для обеспечения совместимости с языком программирования C, но не является строгим надмножеством C из-за различных стандартов. TR1 пытается согласовать некоторые из этих различий путем добавления к различным заголовкам в библиотеке C ++, таких как , , и т. Д. Эти изменения помогают привести C ++ в большее соответствие с версией C99 стандарта C ( не все части C99 включены в TR1).

Технический отчет 2

В 2005 году был сделан запрос предложений по TR2 с особым интересом к Unicode, XML / HTML, сети и удобству использования для начинающих программистов. Звонок TR2 для предложений.

Некоторые из предложений включали:

После того, как был объявлен конкурс предложений по TR2, процедуры ISO были изменены, поэтому TR2 не будет. Вместо этого усовершенствования C ++ будут опубликованы в ряде технических спецификаций. Некоторые из перечисленных выше предложений уже включены в стандарт C ++ или в черновые версии технических спецификаций.

См. Также
  • C ++ 11, стандартный для языка программирования C ++; улучшения библиотеки были основаны на TR1
  • C11 (стандартная версия C), самом последнем стандарте для языка программирования C
  • Boost library, большой коллекции переносимых библиотек C ++, некоторые из которых были включен в TR1
  • Стандартную библиотеку шаблонов, часть текущей Стандартной библиотеки C ++
Ссылки

Источники

Внешние ссылки
Последняя правка сделана 2021-05-13 08:52:51
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте