avr39ripe

cppSTLBasics

Sep 28th, 2021
555
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <memory>
  3. #include <array>
  4. #include <vector>
  5. #include <forward_list>
  6. #include <algorithm>
  7.  
  8. class Item
  9. {
  10.     std::string name;
  11.     std::weak_ptr<Item> pair;
  12. public:
  13.     const int size{ 34 };
  14.     Item(std::string nameP) : name{ nameP } { std::cout << "Item created for " << this << '\n'; }
  15.  
  16.     Item(const Item& it) = delete;
  17.     Item& operator=(const Item& it) = delete;
  18.  
  19.  
  20.     const std::string& getName()const { return name; };
  21.  
  22.     void print()const { std::cout << "Item # " << this << " named " << name << '\n'; }
  23.     ~Item() { std::cout << "Item destroyed for " << this << '\n'; }
  24.  
  25.     const std::shared_ptr<Item> getPair()const { return pair.lock(); }
  26.  
  27.     friend bool addPair(std::shared_ptr<Item>& left, std::shared_ptr<Item>& right)
  28.     {
  29.         if (!left or !right)
  30.         {
  31.             return false;
  32.         }
  33.  
  34.         left->pair = right;
  35.         right->pair = left;
  36.  
  37.         std::cout << left->getName() << " paired with " << right->getName() << '\n';
  38.  
  39.         return true;
  40.     }
  41.  
  42.     friend bool addFriend(std::shared_ptr<Item>& left, std::shared_ptr<Item>& right)
  43.     {
  44.         if (!left or !right)
  45.         {
  46.             return false;
  47.         }
  48.  
  49.         left->pair = right;
  50.        
  51.         std::cout << right->getName() << " is friend of " << left->getName() << '\n';
  52.  
  53.         return true;
  54.     }
  55. };
  56.  
  57. void printItem(Item* it)
  58. {
  59.     it->print();
  60. }
  61.  
  62. namespace itstep
  63. {
  64.     template <typename InIter, typename Func>
  65.     void for_each(InIter begin, InIter end, Func func)
  66.     {
  67.         for (; begin != end; ++begin)
  68.         {
  69.             func(*begin);
  70.         }
  71.     }
  72.  
  73.     template <typename T>
  74.     void print(T& elem)
  75.     {
  76.         std::cout << elem << ' ';
  77.     }
  78.  
  79.     template <typename T>
  80.     void mul2(T& elem)
  81.     {
  82.         elem *= 2;
  83.     }
  84.  
  85. }
  86.  
  87.  
  88. int main()
  89. {
  90.     std::array<int, 10> staticArr;
  91.     //std::vector<int> dynArr{1,2,3,4,5,6,7,8,9,10};
  92.  
  93.     std::forward_list<int> dynArr{ 1,2,3,4,5,6,7,8,9,10 };
  94.  
  95.     auto begin{ dynArr.begin() };
  96.     auto end{ dynArr.end() };
  97.  
  98.     //for (begin = dynArr.begin(); begin != end; ++begin)
  99.     //{
  100.     //  std::cout << *begin << ' ';
  101.     //}
  102.  
  103.     auto printer{ [](auto& elem) { std::cout << elem << ' '; } };
  104.  
  105.     itstep::for_each(dynArr.begin(), dynArr.end(), printer);
  106.  
  107.     std::cout << '\n';
  108.  
  109.     //for (begin = dynArr.begin(); begin != end; ++begin)
  110.     //{
  111.     //  *begin *=2;
  112.     //}
  113.     std::for_each(dynArr.begin(), dynArr.end(), [](auto& elem) { elem *= 2; });
  114.  
  115.     std::cout << '\n';
  116.  
  117.     //for (begin = dynArr.begin(); begin != end; ++begin)
  118.     //{
  119.     //  std::cout << *begin << ' ';
  120.     //}
  121.  
  122.     std::for_each(dynArr.begin(), dynArr.end(), printer);
  123.  
  124.     return 0;
  125. }
  126.  
  127.  
  128.  
  129.  
  130.  
RAW Paste Data