Nous considérons toujours notre code affichant le contenu d'un conteneur tel que défini dans la première partie.
template<typename containerT, typename charT, typename traits = std::char_traits<charT>> std::basic_ostream<charT, traits>& operator << (std::basic_ostream<charT, traits>& aStream, const containerT& aContainer) { aStream << "{"; auto end = aContainer.end(); for(auto it = aContainer.begin(); it != end;) { aStream << *it ++; if(it != end) aStream << ", "; } aStream << "}"; }
Déterminer ce qui va caractériser un conteneur pouvant être pris comme argument par la fonction précédente ?
Implanter un concept qui permet de formaliser les exigences que vous venez de formuler ?
Ajouter les contraintes à l'opérateur << qui a été défini pour un conteineur.
Introduisez une implantation de l'opérateur `«` qui pour tout type affiche 'NONE'.
Nous avons deux fonctions pour effectuer un tri, l'algorithme simple de tri que nous avons implanté et l'algorithme ``std::sort`` fourni par la STL.
Cependant notre algorithme fonctionne pour des itérateurs qui ne supportent pas l'accès indexé tandis que l'algorithme ``std::sort`` est un quicksort et nécessite un accès indexé mais qui est plus rapide.
Modifier le code de ``std::simple_sort`` pour appeller ``std::sort`` si jamais les itérateurs sont des itérateurs supportant l'accès direct (``std::random_access_iterator``).