Corrigé du TD 7 : itérateurs et conteneurs

Exercices

Pour insérer une valeur dans un std::vector, il faut en moyenne n/2 opérations, car il faut déplacer tous les éléments situés après la position d'insertion. Dans le cas d'une liste, il faut un nombre constant d'opérations, quelle que soit la position d'insertion. Il faut donc réfléchir à l'usage qu'on veut faire d'un conteneur avant de choisir son type.

Pour insérer une valeur à la troisième place d'un vecteur v, l'instruction est

v.insert(v.begin()+3,valeur);

Le code pour échanger les éléments d'un vecteur avec ceux d'une liste de float est le suivant :

std::list<float>::iterator lIter = l.begin();
std::vector<float>::iterator vIter = v.begin();
 
while(lIter != l.end())
{
    float tmp = *lIter;
    *lIter = *vIter;
    *vIter = tmp;
    ++lIter;
    ++vIter;
}

Il faut cependant veiller à ce que la taille des deux conteneurs soit la même.

Pour copier l dans v, le code est le suivant :

std::copy(l.begin(), l.end(), v.begin());

Il faut également veiller à ce que l soit de taille supérieure ou égale à celle de v.

Le tri de v et l'affichage s'effectuent par :

std::sort(v.begin(), v.end());
for(std::vector<float>::const_iterator it = v.begin() it != v.end(); ++it)
{
    std::cout << *it << std::endl;
}

Le conteneur ''std::map''

std::map<std::string, int> m;
std::vector<std::string> cles;
std::vector<int> valeurs;
for(std::map<std::string, int>::const_iterator it=m.begin(); it!=m.end(); ++it)
{
    cles.push_back(it->first);
    valeurs.push_back(it->second);
}

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>