Advertisement
Guest User

Untitled

a guest
Jan 30th, 2015
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.50 KB | None | 0 0
  1. template<class It, class T>
  2. std::pair<It, It> plus_longue_sequence(It deb, It fin, T pred)
  3. {
  4. std::pair<It, It> pairResult;
  5.  
  6. // Compteur du nombre de consécutifs.
  7. int currConsec = 1;
  8. // Contient le plus grand nombre de consécutifs à date.
  9. int plusHautConsec = 0;
  10. bool resultSet = false;
  11.  
  12. // Itérateur temporaire afin de comparer un élément avec son prochain.
  13. It temp = deb;
  14. // Itérateur qui identifiera le début de notre série consécutive.
  15. It result = deb;
  16. fin--;
  17. for (; deb != fin; ++temp)
  18. {
  19. ++deb;
  20. if (pred(*temp))
  21. {
  22. if (*temp == *deb)
  23. {
  24. currConsec++;
  25.  
  26. // Si c'est le premier consécutif, on retient le *
  27. // du premier élément de la "série" pour le retourner
  28. // si c'est ce qu'on recherche.
  29. if (currConsec > plusHautConsec)
  30. {
  31. if (!resultSet)
  32. result = temp - (plusHautConsec-1);
  33. plusHautConsec = currConsec;
  34. resultSet = true;
  35. }
  36. }
  37. else
  38. {
  39. currConsec = 1;
  40. resultSet = false;
  41. }
  42. }
  43. }
  44. pairResult.first = result;
  45. pairResult.second = result + plusHautConsec;
  46. return pairResult;
  47. }
  48.  
  49. int main()
  50. {
  51. vector<int> v = { 1, 1, 1, 2, 2, 2, 2, 2, 4, 4, 4, 4, 1, 1 };
  52. /*int n;
  53.  
  54. cin >> n;
  55. if (n > 0)
  56. cout << endl << *trouver_consecutifs(begin(v), end(v), n) << endl;
  57. else
  58. cout << "Nombre incorrect." << endl;*/
  59.  
  60. auto res = plus_longue_sequence(v.begin(), v.end(), [&](int n) { return n % 2 == 0; });
  61. cout << *res.first;
  62. cout << " | ";
  63. cout << *res.second;
  64. cout << endl;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement