Существуют ли какие-либо заголовки STL, которые не являются частью стандартной библиотеки С++?

Я знаю, что некоторые заголовки стандартной библиотеки C++ происходят из STL, например vector. Но мне не удалось найти обновленный список заголовков STL, которые до сих пор не включены в стандартную библиотеку. Они существуют?

PS: я хотел бы, чтобы они были перечислены, а также знать, включают ли они все основные реализации или где их можно получить, если это возможно.


person Marc.2377    schedule 23.03.2015    source источник
comment
Я бы сказал, что к настоящему времени стандартная библиотека C++ намного больше, чем STL.   -  person Angew is no longer proud of SO    schedule 23.03.2015
comment
Конечно; например, rope отсутствует   -  person Cornstalks    schedule 23.03.2015
comment
@Agnew: Это может быть правдой, но есть вещи, которые были частью STL, которые так и не были приняты, например rope<>   -  person John Dibling    schedule 23.03.2015
comment
@Marc.2377: Не знаю, можно ли считать его достоверным или актуальным, но вы можете проверить здесь: sgi.com/tech/stl/table_of_contents.html   -  person John Dibling    schedule 23.03.2015
comment
Я думаю, что rope — это единственная важная часть функциональности STL, которая никогда не была включена в стандартный C++ ни в какой форме. У нас может не быть <hash_set>, но теперь у нас есть <unordered_set>, что почти то же самое.   -  person Brian Bi    schedule 23.03.2015
comment
Помимо полностью отсутствующих заголовков, некоторые из заголовков стандартных библиотек, которые соответствуют именам заголовков STL, не содержат точно такие же шаблоны. Например, и стандартная библиотека, и STL имеют заголовки с именами functional, но версия STL включает (среди прочего) select1st и select2nd, которых нет в версии стандартной библиотеки.   -  person Jerry Coffin    schedule 23.03.2015
comment
Я не уверен, но можно ли рассмотреть буст?   -  person odbhut.shei.chhele    schedule 29.04.2015


Ответы (1)


Обратите внимание, что это разбивка по функциям, а не по заголовкам, потому что это кажется более полезным.

Если мы изучим документацию SGI по STL, мы обнаружим следующее:

  1. slist был переименован в std::forward_list.
  2. bit_vector был заменен спецификацией шаблона std::vector<bool>. Реализация этого может (не должна) оптимизировать пространство так, как это делает bit_vector.
  3. hash_set и друзья теперь пишутся как unordered_set. Функционал вроде тот же. (Спасибо ТС!)
  4. rope отсутствует. В стандартной библиотеке нет эквивалентной структуры данных. Я не смог найти соответствующее обсуждение WG21 по этой теме.
  5. sequence_buffer отсутствует, потому что он в основном использовался для обратной вставки rope.
  6. random_sample и random_sample_n отсутствуют. Причина обсуждается в N3547:
    #P3#

Версия алгоритма random_sample_n попала в TS Library Fundamentals и называется std::experimental::sample, последняя итерация предложения N3925 была принята в 2014-02, но еще не является частью стандарта, я полагаю, мы увидим в C ++17. (Спасибо ТС!)

  1. lexicographical_compare_3way отсутствует. Это было сочтено «недостаточно важным» для стандартизации в соответствии с N2666.
  2. power пишется как pow и не имеет общих возможностей, которые есть у power.
  3. identity, project1st, project2nd, select1st и select2nd так и не были стандартизированы. Не нашел обсуждения почему.
  4. subtractive_rng тоже отсутствует. Предположительно, потому что <random> заменит это проблемное пространство.
  5. binder1st, binder2nd, ptr_fun, pointer_to_unary_function, pointer_to_binary_function, mem_fun (и друзья), unary_compose и binary_compose отсутствуют или устарели. Их более или менее вытесняют std::bind и друзья.
  6. construct и destroy перемещены в класс allocator и не существуют как отдельные функции. (Спасибо ТС!)
  7. temporary_buffer отсутствует. Но доступны get_temporary_buffer и return_temporary_buffer. Я не смог точно выяснить, почему, но та болтовня, с которой я столкнулся, кажется, подразумевает, что она каким-то образом довольно фундаментально сломана, и многие люди пытались это исправить. Что именно и как остается для меня загадкой.
person OmnipotentEntity    schedule 22.05.2015
comment
Пожалуйста, дайте мне знать, если я ошибаюсь в каких-либо деталях, я обновлю их. Это довольно сложный ответ, и я, скорее всего, сделал несколько ошибок. - person OmnipotentEntity; 22.05.2015
comment
У нас есть unordered_meow вместо hash_meow. - person T.C.; 22.05.2015
comment
Кроме того, я думаю, что std::experimental::sample по существу random_sample_n. construct и destroy теперь являются функциями-членами распределителя, а значение по умолчанию предоставляется allocator_traits. - person T.C.; 22.05.2015
comment
std::experimental не кажется частью стандарта? - person OmnipotentEntity; 22.05.2015
comment
Нет, это в библиотеке основ Т.С. - person T.C.; 22.05.2015