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. |