Большая часть libstdc ++ реализована с использованием только заголовков, но некоторые части STL, такие как std::basic_string
, имеют скомпилированные реализации.
Объявление шаблона std::basic_string
находится в /usr/include/c++/4.4.4/bits/basic_string.h
(заменить«4.4.4» с g++ -dumpversion
), а реализация находится в /usr/include/c++/4.4.4/bits/basic_string.tcc
.Фактические typedef
из std::string
, std::wstring
и т. Д. Находятся в .../bits/stringfwd.h
.Например, если вам нужно создать экземпляр std::basic_string
с другими параметрами шаблона, то вы сделаете что-то вроде:
#include <bits/basic_string.tcc>
template class std::basic_string<long>;
Способ, которым libstdc ++ реализует наборы и карты (только для заголовков), довольно интересен, нотакже очень сложный, поскольку использует собственную реализацию красно-черного дерева (_Rb_tree
).
Реализация libstdc ++ std::vector
(также только для заголовка) более автономна, поэтому стоит взглянуть на/usr/include/c++/4.4.4/bits/stl_vector.h
, чтобы дать вам представление о внутренностях libstdc ++.Другой интересный файл - .../bits/stl_algo.h
, который содержит определения алгоритмов STL.
Примечание: В Windows с MinGW вы найдете заголовки libstdc ++ в lib\gcc\mingw32\4.4.0\include\c++\bits
вашей установки MinGW, заменив '4.4.0' на g++ -dumpversion
.