web-dev-qa-db-fra.com

Où sont les en-têtes de la bibliothèque standard C++

Je me demande où se trouvent les en-têtes de la bibliothèque C++ Standard dans mon système de fichiers. En particulier, je recherche la définition du modèle vectoriel. J'ai cherché dans/usr/include/et divers sous-répertoires. J'ai aussi essayé 'localiser vector.h' qui a évoqué de nombreuses implémentations de vecteurs, mais pas celle standard. Qu'est-ce que je rate? (La distribution est Gentoo)

Arrière-plan: Je suis en train de profiler une bibliothèque qui parcourt la plupart du temps des vecteurs et gprof montre que la plupart du temps est consacré à 

std::vector<int, std::allocator<int> >::_M_insert_aux(
  __gnu_cxx::__normal_iterator<int*, std::vector<
      int, std::allocator<int> > >, int const&)

C'est probablement ce qui se passe en interne sur un std :: vector :: Push_back, mais je ne suis pas sûr.

17
Thomas

GCC a généralement les en-têtes C++ standard installés dans /usr/include/c++/<version>/. Vous pouvez exécuter gcc -v pour savoir quelle version vous avez installée.

Au moins dans ma version, il n'y a pas vector.h; l'en-tête public est juste vector (sans extension), et la plupart de l'implémentation est en bits/stl_vector.h.

C'est le cas sur ma distribution Ubuntu. votre distribution peut différer.

28
Mike Seymour

Exécuter g++ -v -v -v génère beaucoup de choses, y compris tous les répertoires d'inclusion recherchés. vector est dans l'un de ceux-ci.

10

Sur mon système Debian Stable, vector est ici:

/usr/include/c++/4.4/vector
2
genpfault

Sur une installation "ordinaire" d'ubuntu, vous devez installer 

libstdc++- version -dev 

pour obtenir les fichiers d'en-tête.

puis en vérifiant les fichiers installés, vous aurez le chemin!

1
jo_

Dans de nombreux IDE (par exemple, NetBeans), vous pouvez utiliser Ctrl+Click to className pour accéder à la définition.

0
RiaD