c ++ векторный исходный код - PullRequest
8 голосов
/ 29 ноября 2010

Я пытаюсь получить исходный код вектора, чтобы увидеть, как реализован стандартный вектор std или stl.

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

Ответы [ 4 ]

10 голосов
/ 29 ноября 2010

Не существует «стандартного» вектора - стандарт определяет поведение и интерфейс (и некоторые детали реализации, такие как непрерывное хранилище), но код должен определять автор компилятора.

Ваш компилятор должен иметьего собственный заголовочный файл <vector>. Вы проверили это в пути включения сборки?Как только вы обнаружите, что вы также должны увидеть другие контейнеры STL в соответствующих заголовках.Список для Microsoft Visual C ++: здесь , включая некоторые проприетарные, поэтому следите за этим в приведенном ниже примере отказа от ответственности:

В Visual C ++ .NET 2003 членыфайлы заголовков <hash_map> и <hash_set> больше не находятся в пространстве имен std, а скорее были перемещены в пространство имен stdext.Для получения дополнительной информации см. Пространство имен stdext.

На моей установке Visual C ++ Express 2010 они находятся в этой папке:

c: \ program files \ microsoft visual Studio 10.0\ vc \ include

5 голосов
/ 28 февраля 2015

Разные среды выполнения имеют разные реализации.

Но я думаю, это то, что вам нужно, широко используемая реализация gcc: https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/vector

Это основной файл заголовка, а реализация -в https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/bits/stl_vector.h и https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/bits/stl_bvector.h

Он использует MACRO, чтобы код работал с хорошей производительностью и соответствовал переменной ситуации, но затруднял чтение, желаю удачи.

4 голосов
/ 29 ноября 2010
3 голосов
/ 29 ноября 2010

Большая часть, если не весь, исходный код std::vector должен содержаться в самом заголовке <vector>.

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

Обратите внимание, что нет единой Истинной Реализации ни одного из контейнеров; каждая реализация стандартной библиотеки C ++ может свободно реализовывать каждый контейнер по своему усмотрению, если только он соответствует требованиям для контейнера.

...