2010-11-29 33 views
6

Estoy tratando de obtener el código fuente del vector para ver cómo se implementa el estándar std o stl vector.C++ código fuente de vector

Esto es para fines de aprendizaje. Ahora la pregunta es dónde puedo encontrar el código fuente. Incluso el código fuente de otro contenedor C++ también es útil.

+3

Siempre es bueno mirar y aprender. Pero no estoy seguro de ver el código fuente de algo tan complejo como 'std :: vector' es una buena opción. Claro que puedes aprender mucho pero también te puedes perder muy fácilmente. – ereOn

+0

Muchas implementaciones de STL incluirán una gran cantidad de código para cosas como la depuración de iteradores: será difícil de leer y contener una gran cantidad de código que no es directamente relevante para lo que hace el vector. Puede que no sea el mejor lugar para aprender. – AshleysBrain

Respuesta

3

La mayoría, si no todos, del código fuente std::vector deberían estar contenidos en el encabezado <vector>.

Los contenedores de biblioteca estándar son todas las plantillas de clase y, como tales, sus definiciones y las definiciones de todas sus funciones miembro están contenidas en sus respectivos encabezados.

Tenga en cuenta que no existe una única implementación verdadera de ninguno de los contenedores; cada implementación de la Biblioteca estándar de C++ es libre de implementar cada contenedor como lo considere oportuno, siempre que cumpla con los requisitos para el contenedor.

10

No hay un vector 'estándar': el estándar define el comportamiento y la interfaz (y algunos detalles de implementación, como el almacenamiento contiguo) pero el código es un asunto que los escritores del compilador deben determinar.

Su compilador debe tener su propio archivo de encabezado <vector>, ¿ha verificado esto en su compilación include path? Una vez que descubra que también debería ver los otros contenedores STL en sus respectivos encabezados. La lista de Microsoft Visual C++ es here, incluyendo algunos que son de propiedad, así que tengan cuidado de que por el siguiente descargo de responsabilidad de la muestra:

En Visual C++ .NET 2003, los miembros de los archivos <hash_map> y <hash_set> cabecera son ya no se encuentra en el espacio de nombre estándar , sino que se ha movido al en el espacio de nombres stdext. Consulte stdext Espacio de nombres para obtener más información.

En mi instalación de Visual C++ Express 2010, se encuentran en esta carpeta:

c: \ archivos de programa \ Microsoft Visual Studio 10.0 \ VC \ include

5

tiempo de ejecución diferente tiene una implementación diferente

Pero supongo que esto es lo que quiere, la implementación gcc ampliamente utilizado: https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/vector

Es el principal archivo de cabecera, y la implementación está en https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/bits/stl_vector.h y https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/bits/stl_bvector.h

Se utiliza macro para hacer que el código funcione con un buen rendimiento y encaje en una situación variable, pero dificulte la lectura, le deseo buena suerte.