Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <memory>
- #include <array>
- #include <vector>
- #include <forward_list>
- #include <algorithm>
- class Item
- {
- std::string name;
- std::weak_ptr<Item> pair;
- public:
- const int size{ 34 };
- Item(std::string nameP) : name{ nameP } { std::cout << "Item created for " << this << '\n'; }
- Item(const Item& it) = delete;
- Item& operator=(const Item& it) = delete;
- const std::string& getName()const { return name; };
- void print()const { std::cout << "Item # " << this << " named " << name << '\n'; }
- ~Item() { std::cout << "Item destroyed for " << this << '\n'; }
- const std::shared_ptr<Item> getPair()const { return pair.lock(); }
- friend bool addPair(std::shared_ptr<Item>& left, std::shared_ptr<Item>& right)
- {
- if (!left or !right)
- {
- return false;
- }
- left->pair = right;
- right->pair = left;
- std::cout << left->getName() << " paired with " << right->getName() << '\n';
- return true;
- }
- friend bool addFriend(std::shared_ptr<Item>& left, std::shared_ptr<Item>& right)
- {
- if (!left or !right)
- {
- return false;
- }
- left->pair = right;
- std::cout << right->getName() << " is friend of " << left->getName() << '\n';
- return true;
- }
- };
- void printItem(Item* it)
- {
- it->print();
- }
- namespace itstep
- {
- template <typename InIter, typename Func>
- void for_each(InIter begin, InIter end, Func func)
- {
- for (; begin != end; ++begin)
- {
- func(*begin);
- }
- }
- template <typename T>
- void print(T& elem)
- {
- std::cout << elem << ' ';
- }
- template <typename T>
- void mul2(T& elem)
- {
- elem *= 2;
- }
- }
- int main()
- {
- std::array<int, 10> staticArr;
- //std::vector<int> dynArr{1,2,3,4,5,6,7,8,9,10};
- std::forward_list<int> dynArr{ 1,2,3,4,5,6,7,8,9,10 };
- auto begin{ dynArr.begin() };
- auto end{ dynArr.end() };
- //for (begin = dynArr.begin(); begin != end; ++begin)
- //{
- // std::cout << *begin << ' ';
- //}
- auto printer{ [](auto& elem) { std::cout << elem << ' '; } };
- itstep::for_each(dynArr.begin(), dynArr.end(), printer);
- std::cout << '\n';
- //for (begin = dynArr.begin(); begin != end; ++begin)
- //{
- // *begin *=2;
- //}
- std::for_each(dynArr.begin(), dynArr.end(), [](auto& elem) { elem *= 2; });
- std::cout << '\n';
- //for (begin = dynArr.begin(); begin != end; ++begin)
- //{
- // std::cout << *begin << ' ';
- //}
- std::for_each(dynArr.begin(), dynArr.end(), printer);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement