Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- template<class It, class T>
- std::pair<It, It> plus_longue_sequence(It deb, It fin, T pred)
- {
- std::pair<It, It> pairResult;
- // Compteur du nombre de consécutifs.
- int currConsec = 1;
- // Contient le plus grand nombre de consécutifs à date.
- int plusHautConsec = 0;
- bool resultSet = false;
- // Itérateur temporaire afin de comparer un élément avec son prochain.
- It temp = deb;
- // Itérateur qui identifiera le début de notre série consécutive.
- It result = deb;
- fin--;
- for (; deb != fin; ++temp)
- {
- ++deb;
- if (pred(*temp))
- {
- if (*temp == *deb)
- {
- currConsec++;
- // Si c'est le premier consécutif, on retient le *
- // du premier élément de la "série" pour le retourner
- // si c'est ce qu'on recherche.
- if (currConsec > plusHautConsec)
- {
- if (!resultSet)
- result = temp - (plusHautConsec-1);
- plusHautConsec = currConsec;
- resultSet = true;
- }
- }
- else
- {
- currConsec = 1;
- resultSet = false;
- }
- }
- }
- pairResult.first = result;
- pairResult.second = result + plusHautConsec;
- return pairResult;
- }
- int main()
- {
- vector<int> v = { 1, 1, 1, 2, 2, 2, 2, 2, 4, 4, 4, 4, 1, 1 };
- /*int n;
- cin >> n;
- if (n > 0)
- cout << endl << *trouver_consecutifs(begin(v), end(v), n) << endl;
- else
- cout << "Nombre incorrect." << endl;*/
- auto res = plus_longue_sequence(v.begin(), v.end(), [&](int n) { return n % 2 == 0; });
- cout << *res.first;
- cout << " | ";
- cout << *res.second;
- cout << endl;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement