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:33] 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 221: | 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. | ||
| 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. | ||