PracticeDev/study_cpp/cpp_primer_source_code/Chapter 18/lambda0.cpp

63 lines
2.0 KiB
C++
Raw Normal View History

2022-12-20 17:31:11 +08:00
// lambda0.cpp -- using lambda expressions
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <ctime>
const long Size1 = 39L;
const long Size2 = 100*Size1;
const long Size3 = 100*Size2;
bool f3(int x) {return x % 3 == 0;}
bool f13(int x) {return x % 13 == 0;}
int main()
{
using std::cout;
std::vector<int> numbers(Size1);
std::srand(std::time(0));
std::generate(numbers.begin(), numbers.end(), std::rand);
// using function pointers
cout << "Sample size = " << Size1 << '\n';
int count3 = std::count_if(numbers.begin(), numbers.end(), f3);
cout << "Count of numbers divisible by 3: " << count3 << '\n';
int count13 = std::count_if(numbers.begin(), numbers.end(), f13);
cout << "Count of numbers divisible by 13: " << count13 << "\n\n";
// increase number of numbers
numbers.resize(Size2);
std::generate(numbers.begin(), numbers.end(), std::rand);
cout << "Sample size = " << Size2 << '\n';
// using a functor
class f_mod
{
private:
int dv;
public:
f_mod(int d = 1) : dv(d) {}
bool operator()(int x) {return x % dv == 0;}
};
count3 = std::count_if(numbers.begin(), numbers.end(), f_mod(3));
cout << "Count of numbers divisible by 3: " << count3 << '\n';
count13 = std::count_if(numbers.begin(), numbers.end(), f_mod(13));
cout << "Count of numbers divisible by 13: " << count13 << "\n\n";
// increase number of numbers again
numbers.resize(Size3);
std::generate(numbers.begin(), numbers.end(), std::rand);
cout << "Sample size = " << Size3 << '\n';
// using lambdas
count3 = std::count_if(numbers.begin(), numbers.end(),
[](int x){return x % 3 == 0;});
cout << "Count of numbers divisible by 3: " << count3 << '\n';
count13 = std::count_if(numbers.begin(), numbers.end(),
[](int x){return x % 13 == 0;});
cout << "Count of numbers divisible by 13: " << count13 << '\n';
// std::cin.get();
return 0;
}