Ещё возникла подобная задача: в последовательности элементов (вектор, массив в стиле C, любой контейнер, ...) проверить, что некоторый
диапазон последовательных элементов
все попадают под какое-то условие (чётные, нечётные, положительные, отрицательные ... простые числа, литеры русского алфавита ... всё что угодно!).
Код: Выделить всё
#include <iostream> // std::cout
#include <iterator> // std::next std::next
#include <algorithm> // std::all_of
#include <array> // std::array
using namespace std;
int main( int argc, char *argv[] ) {
array<int,8> arr1 = {3,5,7,11,13,17,19,23};
if ( all_of(arr1.begin(), arr1.end(), [](int i){return i%2;}) )
cout << "All the elements are odd numbers." << endl;
array<int,12> arr2 = {1,3,5,2,2,4,6,8,10,12,10,8};
if (all_of(next(arr2.begin(), 3), arr2.end(), [](int i)->bool{return !(i%2);}))
cout << "The elements begin from 4 are even numbers.\n";
int arr3[] = {1,3,5,2,2,4,6,8,10,12,10,8};
if (all_of(arr3 + 3, arr3 + sizeof(arr3) / sizeof(arr3[0]) - 1, [](int i)->bool{return !( i%2 );}))
cout << "The elements begin from 4 are even numbers.\n";
array<int,12> arr4 = {1,3,5,2,2,4,6,8,10,11,9,7};
if (all_of(next(arr4.begin(), 3), prev(arr2.end(), 4), [](int i)->bool{return !(i%2);}))
cout << "All elements in diapason 3...8 are even numbers.\n";
}
Код: Выделить всё
olej@nvidia:~/2020_WORK/Zodiac_Systems/OWN-DRAFT-TESTs$ g++ nechet.cc -o nechet
olej@nvidia:~/2020_WORK/Zodiac_Systems/OWN-DRAFT-TESTs$ ./nechet
All the elements are odd numbers.
The elements begin from 4 are even numbers.
The elements begin from 4 are even numbers.
All elements in range 3...8 are even numbers.
P.S. почему next() и prev() а не +3 и -4? потому что это будет работать с
любыми контейнерами, а не только с векторами.