2010-11-29 2 views
6

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

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

+3

Всегда приятно смотреть и учиться. Но я не уверен, глядя на исходный код чего-то сложного, как `std :: vector` - хороший выбор. Конечно, вы можете многому научиться, но вы тоже можете легко потеряться. – ereOn 2010-11-29 14:47:29

ответ

3

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

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

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

10

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

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

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

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

C: \ Program Files \ Microsoft Visual Студия 10,0 \ VC \ включают

5

Different выполнения имеет различную реализацию.

Но я думаю, это то, что вы хотите, широко используемый 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 чтобы код работал в хорошей производительности и вписывался в переменную ситуацию, но затрудняет чтение, желаю удачи.

Смежные вопросы