Advertisement
avr39ripe

Pv913EmplaceExpl

Aug 19th, 2020
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.82 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <list>
  4. #include <algorithm>
  5.  
  6. class Verbose
  7. {
  8. public:
  9.     Verbose() { std::cout << "Verbose " << this << '\n'; };
  10.     Verbose(int p) { std::cout << "Verbose int" << this << '\n'; };
  11.     Verbose(const Verbose& obj) { std::cout << "Verbose& " << this << '\n'; };
  12.     Verbose(Verbose&& obj) { std::cout << "Verbose&& " << this << '\n'; };
  13.     ~Verbose() { std::cout << "~Verbose " << this << '\n'; };
  14. };
  15.  
  16. template <typename ElemType>
  17. class Printer
  18. {
  19.     std::ostream& out;
  20.     char delimiter;
  21. public:
  22.     Printer(std::ostream& outP, char delimiterP) : out{ outP }, delimiter{ delimiterP } {};
  23.     Printer() :Printer{ std::cout, '\0' } {};
  24.     Printer(char delimiterP) : Printer{ std::cout, delimiterP } {};
  25.     void operator()(const ElemType& elem) const
  26.     {
  27.         out << elem;
  28.         if (delimiter) out << delimiter;
  29.     };
  30. };
  31.  
  32. class Numerator
  33. {
  34.     int curr;
  35.     int delta;
  36.     static int sumCnt;
  37. public:
  38.     Numerator(int startP, int deltaP) : curr{ startP }, delta{ deltaP }{};
  39.     Numerator() : Numerator{ 0,1 } {};
  40.     int operator()()
  41.     {
  42.         ++sumCnt;
  43.         int ret{ curr };
  44.         curr += delta;
  45.         return ret;
  46.     }
  47.     static int getSumCnt() { return sumCnt; };
  48. };
  49.  
  50. int Numerator::sumCnt{ 0 };
  51.  
  52. template <typename T>
  53. void prn(const T& obj)
  54. {
  55.     std::cout << obj << ' ';
  56. }
  57.  
  58. template <typename Action>
  59. void gen(int beg, int end, Action fun)
  60. {
  61.     while (beg++ != end)
  62.     {
  63.         std::cout << fun() << ' ';
  64.     }
  65. }
  66.  
  67. int main()
  68. {
  69.     std::vector<Verbose> ver;
  70.  
  71.     ver.emplace_back(2);
  72.     ver.push_back(Verbose{ 2 });
  73.     return 0;
  74.  
  75.     Numerator n3{ 0,3 };
  76.     Numerator n3_1{ 0,3 };
  77.  
  78.     for (int i{ 0 }; i < 5; ++i)
  79.     {
  80.         std::cout << n3() << ' ';
  81.     }
  82.  
  83.     std::cout << '\n';
  84.    
  85.     gen(0, 5, []() {return 1; });
  86.  
  87.     return 0;
  88.  
  89.     std::vector<int> arr(10);
  90.     std::vector<int> arr1(20);
  91.     std::list<char> symbols{ 'a','s','d','a','s','x','v' };
  92.  
  93.     Printer<int> printer{ ' ' };
  94.     Printer<int> printerNl{ '\n' };
  95.  
  96.     /*std::for_each(arr.begin(), arr.end(),
  97.         [](auto& el) { el = rand() % 10; std::cout << el << ' '; });*/
  98.    
  99.     int cnt{ 1 };
  100.     int delta{ 2 };
  101.  
  102.     Numerator num{1,3};
  103.     Numerator num2x2{ 2,2 };
  104.  
  105.     //std::generate(arr.begin(), arr.end(), [&]() { return cnt+=delta; });
  106.     std::generate(arr.begin(), arr.end(), num);
  107.  
  108.     std::cout << '\n';
  109.     std::for_each(arr.begin(), arr.end(), prn<int>);
  110.     //std::copy(arr.begin(), arr.end(), std::ostream_iterator<int>(std::cout, " ")); std::cout << '\n';
  111.  
  112.     std::cout << '\n';
  113.  
  114.     std::generate(arr1.begin(), arr1.end(), num2x2);
  115.  
  116.     std::cout << '\n';
  117.     std::copy(arr1.begin(), arr1.end(), std::ostream_iterator<int>(std::cout, " ")); std::cout << '\n';
  118.  
  119.     std::cout << "Totally Numerated elements: " << Numerator::getSumCnt() << '\n';
  120.  
  121.  
  122.  
  123.  
  124.     /*auto it{ arr.begin() };
  125.  
  126.     while ((it = std::find(it, arr.end(), 1)) != arr.end())
  127.     {
  128.         std::cout << "res is: " << std::distance(arr.begin(), it) << " <=> " << *it << '\n';
  129.         ++it;
  130.     }*/
  131.     //std::copy(arr.begin(), arr.end(), std::ostream_iterator<int>(std::cout, " ")); std::cout << '\n';
  132.     //std::cout << '\n';
  133.  
  134.     //std::stable_partition(arr.begin(), arr.end(), [](int el) { return el % 2; });
  135.  
  136.     //std::copy(arr.begin(), arr.end(), std::ostream_iterator<int>(std::cout, " ")); std::cout << '\n';
  137.     //std::cout << '\n';
  138.  
  139.     //auto res{ std::find(arr.begin(), arr.end(), 0)};
  140.     //auto res{ std::count_if(arr.begin(), arr.end(),[](int el) { return (el % 2 == 0) and (el > 5); }) };
  141.  
  142.  
  143.  
  144.     /*if (res != arr.end())
  145.     {
  146.         std::cout << "res is: " << std::distance(arr.begin(), res) << " <=> " << *res << '\n';
  147.     }
  148.     else
  149.     {
  150.         std::cout << "Not FOUND!!\n";
  151.     }*/
  152.     return 0;
  153. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement