2010-05-07 8 views
0

Je construis actuellement mon propre jouet vector pour le plaisir, et je me demandais s'il y a quelque chose comme ce qui suit dans la norme actuelle ou suivante ou dans Boost?algorithmes qui détruisent et copy_construct

template<class T> 
void destruct(T* begin, T* end) 
{ 
    while (begin != end) 
    { 
     begin -> ~T(); 
     ++begin; 
    } 
} 

template<class T> 
T* copy_construct(T* begin, T* end, T* dst) 
{ 
    while (begin != end) 
    { 
     new(dst) T(*begin); 
     ++begin; 
     ++dst; 
    } 
    return dst; 
} 

Répondre

1

std::vector, si je ne me trompe pas, applique ses fonctions de construct de allocateur et destructives des objets, vous pouvez donc utiliser des liants (comme std::tr1::bind) pour laisser std::transform et/ou std::for_each font ceux-ci. Mais pour la boucle de copie, il semble également y avoir std::uninitialized_copy.

+0

Ah, 'uninitialized_copy' est exactement ce que je cherchais. Merci! – fredoverflow

0

Les éléments vectoriels sont détruits dans l'ordre inverse.

0

La STL repose sur allocators (passé en paramètre de modèle par défaut dans des conteneurs STL) qui ont des méthodes construct et destroy et d'autres comme uninitialized_fill, mais pas tous fonctionner sur des plages. L'allocateur, pas le conteneur, sont chargés de fournir ces fonctions. Si vous voulez écrire votre propre classe de vecteurs comme la STL, vous devrez également réinventer les allocateurs.