STL avec des vecteurs non initialisé de stockage?

Je suis en train d'écrire une boucle interne qui doit structs de stockage contigu. Je ne sais pas combien de ces structs il y aura à l'avance. Mon problème est que STL vector initialise ses valeurs à 0, alors peu importe ce que je fais, j'assume le coût de l'initialisation, plus le coût de la mise à l' struct's les membres de leurs valeurs.

Est-il un moyen pour empêcher l'initialisation, ou est-il un STL-comme conteneur avec redimensionnables de stockage contigu et non initialisée éléments?

(Je suis certain que cette partie du code qui doit être optimisé, et je suis certain que l'initialisation est un coût important.)

Aussi, voir mes commentaires ci-dessous pour une clarification au sujet lors de l'initialisation se produit.

CODE:

void GetsCalledALot(int* data1, int* data2, int count) {
    int mvSize = memberVector.size()
    memberVector.resize(mvSize + count); //causes 0-initialization

    for (int i = 0; i < count; ++i) {
        memberVector[mvSize + i].d1 = data1[i];
        memberVector[mvSize + i].d2 = data2[i];
    }
}
  • Note - l'utilisation de la réserve() n'est pas une solution, puisque vous ne pouvez pas légalement accès aux données à des endroits end() et ci-dessus.
  • Une autre précision: ce n'est pas que le constructeur initialise les valeurs à 0. C'est qui redimensionne les appels d'insertion, qui ne.
  • Pourriez-vous nous donner la structure de la déclaration, trop? Merci... 🙂
  • REMARQUE: vous ne pouvez pas accéder à des données non initialisées de toute façon. Même question pour vector<T> le passé .fin() et non initialisée membres d'un T[]. Mais avec un vecteur, les chances sont le débogage de code vous dit que maintenant. Le tableau de code échoue silencieusement sur les clients PC.
  • C'est une bonne question. Pour certaines applications, il est important de réaliser que std::vector initialise toujours ses éléments, même s'ils sont de plain-vieux-données (POD).
  • Voir aussi stackoverflow.com/q/7218574/1969455 pour un allocateur de l'approche. (bon pour les POD types)

InformationsquelleAutor Jim Hunziker | 2008-09-18