#include <algorithm>
#include <iostream>
#include <vector>
struct Even {
void operator( ) ( int n)
{
std:: cout << n;
if ( n % 2 == 0 ) {
std:: cout << " is even " << std:: endl ;
++ evenCount;
}
else {
std:: cout << " is odd " << std:: endl ;
}
}
// To use a single copy and preserve
// value use static
static int evenCount;
} ;
int Even:: evenCount = 0 ;
int main( )
{
// Create a vector object that contains 10 elements.
std:: vector < int > v = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } ;
// Count the number of even numbers in the vector
// Using function object
for_each( v.begin ( ) , v.end ( ) , Even( ) ) ;
// Print the count of even numbers to the console.
std:: cout << "There are " << Even:: evenCount
<< " even numbers in the vector." << std:: endl ;
// Using lambda function
int evenCount = 0 ;
for_each( v.begin ( ) , v.end ( ) ,
// The capture-list specifies what variables
// the lamba expression can use from outside.
[ & evenCount] ( int n)
{
std:: cout << n;
if ( n % 2 == 0 ) {
std:: cout << " is even " << std:: endl ;
++ evenCount;
}
else {
std:: cout << " is odd " << std:: endl ;
}
}
) ;
// Print the count of even numbers to the console.
std:: cout << "There are " << evenCount
<< " even numbers in the vector." << std:: endl ;
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKc3RydWN0IEV2ZW4gewoKICAgIHZvaWQgb3BlcmF0b3IoKSAoaW50IG4pCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8IG47CgogICAgICAgIGlmIChuICUgMiA9PSAwKSB7CiAgICAgICAgICAgIHN0ZDo6Y291dCA8PCAiIGlzIGV2ZW4gIiA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgICsrZXZlbkNvdW50OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHN0ZDo6Y291dCA8PCAiIGlzIG9kZCAiIDw8IHN0ZDo6ZW5kbDsKICAgICAgICB9CiAgICB9CgogICAgLy8gVG8gdXNlIGEgc2luZ2xlIGNvcHkgYW5kIHByZXNlcnZlCiAgICAvLyB2YWx1ZSB1c2Ugc3RhdGljCiAgICBzdGF0aWMgaW50IGV2ZW5Db3VudDsKfTsKCmludCBFdmVuOjpldmVuQ291bnQgPSAwOwoKaW50IG1haW4oKQp7CiAgICAvLyBDcmVhdGUgYSB2ZWN0b3Igb2JqZWN0IHRoYXQgY29udGFpbnMgMTAgZWxlbWVudHMuCiAgICBzdGQ6OnZlY3RvcjxpbnQ+IHYgPSB7MSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTB9OwoKICAgIC8vIENvdW50IHRoZSBudW1iZXIgb2YgZXZlbiBudW1iZXJzIGluIHRoZSB2ZWN0b3IKCgogICAgLy8gVXNpbmcgZnVuY3Rpb24gb2JqZWN0CiAgICBmb3JfZWFjaCh2LmJlZ2luKCksIHYuZW5kKCksIEV2ZW4oKSk7CgogICAgLy8gUHJpbnQgdGhlIGNvdW50IG9mIGV2ZW4gbnVtYmVycyB0byB0aGUgY29uc29sZS4KICAgIHN0ZDo6Y291dCA8PCAiVGhlcmUgYXJlICIgPDwgRXZlbjo6ZXZlbkNvdW50CiAgICAgICAgPDwgIiBldmVuIG51bWJlcnMgaW4gdGhlIHZlY3Rvci4iIDw8IHN0ZDo6ZW5kbDsKCiAgICAvLyBVc2luZyBsYW1iZGEgZnVuY3Rpb24KICAgIGludCBldmVuQ291bnQgPSAwOwoKICAgIGZvcl9lYWNoKHYuYmVnaW4oKSwgdi5lbmQoKSwKCiAgICAgICAgICAgIC8vIFRoZSBjYXB0dXJlLWxpc3Qgc3BlY2lmaWVzIHdoYXQgdmFyaWFibGVzCiAgICAgICAgICAgIC8vIHRoZSBsYW1iYSBleHByZXNzaW9uIGNhbiB1c2UgZnJvbSBvdXRzaWRlLgogICAgICAgICAgICBbJmV2ZW5Db3VudF0gKGludCBuKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzdGQ6OmNvdXQgPDwgbjsKCiAgICAgICAgICAgICAgICBpZiAobiAlIDIgPT0gMCkgewogICAgICAgICAgICAgICAgICAgIHN0ZDo6Y291dCA8PCAiIGlzIGV2ZW4gIiA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgICAgICAgICAgKytldmVuQ291bnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpjb3V0IDw8ICIgaXMgb2RkICIgPDwgc3RkOjplbmRsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICApOwoKICAgIC8vIFByaW50IHRoZSBjb3VudCBvZiBldmVuIG51bWJlcnMgdG8gdGhlIGNvbnNvbGUuCiAgICBzdGQ6OmNvdXQgPDwgIlRoZXJlIGFyZSAiIDw8IGV2ZW5Db3VudAogICAgICAgIDw8ICIgZXZlbiBudW1iZXJzIGluIHRoZSB2ZWN0b3IuIiA8PCBzdGQ6OmVuZGw7Cn0K