Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

Если мы рассмотрим документацию SGI для STL, мы найдем следующее:

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

    После рассмотрения РГО21 на совещании в Софии-Антиполисе Фостер обновил это предложение. Среди других изменений он отозвал [random_sample и random_sample_n]: "LWG обеспокоена тем, что они могут быть недостаточно хорошо поняты для стандартизации... Может быть целесообразно предложить эти алгоритмы для TR2" [ Aus08b ]. Вики-протоколы обсуждения одинаково кратки: "Бьярне чувствует, что обоснование недостаточно. PJ беспокоится, что мы ошибаемся. Лоуренс опасается, что люди сворачивайте свои собственные и ошибайтесь. Хороший кандидат на ТР2" [ LWG08 ]. Последующее голосование в отношении эти предлагаемые алгоритмы достигли устойчивого консенсуса LWG (10-1, 2 абс.) в пользу их будущего включение в технический отчет (в настоящее время называемый технической спецификацией)

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

  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 и не существуют как автономные функции. (Спасибо T.C.!)
  7. temporary_buffer отсутствует. Но доступны get_temporary_buffer и return_temporary_buffer. Я не смог точно узнать, почему, но какая болтовня, с которой я столкнулась, кажется, подразумевает, что она сломалась каким-то образом довольно принципиально, и многие люди пытались ее исправить. То, что и как остается для меня загадкой.