This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
in204:tds:sujets:td4:part1 [2019/10/15 13:32] bmonsuez [Question n°1.2] |
in204:tds:sujets:td4:part1 [2022/11/18 10:49] (current) |
||
---|---|---|---|
Line 90: | Line 90: | ||
</code> | </code> | ||
<hidden Explication & correction> | <hidden Explication & correction> | ||
+ | |||
<code cpp> | <code cpp> | ||
Line 215: | Line 216: | ||
</code> | </code> | ||
- | |||
- | </hidden> | ||
Quand on appelle la fonction ''distance'', elle appelle la fonction distance qui prend trois arguments, le dernier étant un objet ayant un type identifiant le type d'itérateur. Deux fonctions ''distances'' internes (ie. dans un espace de nom anoyme) sont définies: | Quand on appelle la fonction ''distance'', elle appelle la fonction distance qui prend trois arguments, le dernier étant un objet ayant un type identifiant le type d'itérateur. Deux fonctions ''distances'' internes (ie. dans un espace de nom anoyme) sont définies: | ||
Line 223: | Line 222: | ||
typename std::iterator_traits<inputIterator>::difference_type | typename std::iterator_traits<inputIterator>::difference_type | ||
distance(inputIterator first, inputIterator last, iteratorTag) | distance(inputIterator first, inputIterator last, iteratorTag) | ||
- | </code>\\ Cette fonction est la fonction générique qui fonctionne pour l'intégralité des différents type d'itérateurs ''iteratorTag''. | + | </code>Cette fonction est la fonction générique qui fonctionne pour l'intégralité des différents type d'itérateurs ''iteratorTag''. |
* <code cpp> | * <code cpp> | ||
template<class inputIterator> | template<class inputIterator> | ||
typename std::iterator_traits<inputIterator>::difference_type | typename std::iterator_traits<inputIterator>::difference_type | ||
distance(inputIterator first, inputIterator last, std::random_access_iterator_tag) | distance(inputIterator first, inputIterator last, std::random_access_iterator_tag) | ||
- | </code>\\ Cette fonction est la version spécialisée pour le type ''iteratorTag'' qui doit être égal à [[https://en.cppreference.com/w/cpp/iterator/iterator_tags|std::random_access_iterator_tag]]. | + | </code>Cette fonction est la version spécialisée pour le type ''iteratorTag'' qui doit être égal à [[https://en.cppreference.com/w/cpp/iterator/iterator_tags|std::random_access_iterator_tag]]. |
Comme la version spécialisée est prioritaire sur la version générique, si l'itérateur définit ''iterator_category'' comme étant [[https://en.cppreference.com/w/cpp/iterator/iterator_tags|std::random_access_iterator_tag]], c'est la version spécialisée de la fonction qui sera appelé, sinon la version générique, ce qui permet d'avoir recours à la méthode optimale pour calculer la distance. | Comme la version spécialisée est prioritaire sur la version générique, si l'itérateur définit ''iterator_category'' comme étant [[https://en.cppreference.com/w/cpp/iterator/iterator_tags|std::random_access_iterator_tag]], c'est la version spécialisée de la fonction qui sera appelé, sinon la version générique, ce qui permet d'avoir recours à la méthode optimale pour calculer la distance. | ||
+ | |||
+ | </hidden> | ||
===== Question n°2 ===== | ===== Question n°2 ===== | ||
Line 288: | Line 289: | ||
using namespace std; | using namespace std; | ||
- | int testSortAndUpper() | + | void testSortAndUpper() |
{ | { | ||
+ | std::vector<int> v{ 10, 20, 30, 30, 20, 10, 10, 20 }; | ||
// Appel de la fonction "upper' sur le vecteur en commençant par le premier élément | // Appel de la fonction "upper' sur le vecteur en commençant par le premier élément | ||
// et en terminant avec le dernier. | // et en terminant avec le dernier. | ||
Line 305: | Line 307: | ||
- | int testSortHeapAndUpper() | + | void testSortHeapAndUpper() |
{ | { | ||
+ | std::vector<int> v{ 10, 20, 30, 30, 20, 10, 10, 20 }; | ||
+ | std::make_heap(v.begin(), v.end()); | ||
// Appel de la fonction "upper' sur le vecteur en commençant par le premier élément | // Appel de la fonction "upper' sur le vecteur en commençant par le premier élément | ||
// et en terminant avec le dernier. | // et en terminant avec le dernier. |