fork(3) download
  1. #include <iostream>
  2. #include <algorithm>
  3.  
  4. struct Node {
  5. int value;
  6. Node* next;
  7. };
  8.  
  9. bool operator==(const Node& node, int value) { //<-- без него не компилирует
  10. return node.value == value;
  11. }
  12.  
  13. class NodeIterator
  14. : public std::iterator<std::forward_iterator_tag, Node*> {
  15.  
  16. Node* node;
  17. public:
  18. NodeIterator():node(nullptr) { std::cout << "x"; }
  19. NodeIterator(Node* _node):node(_node) { }
  20. Node* getNode() const { return node; }
  21.  
  22. Node& operator*() { return *node; }
  23. Node* operator->() { return node; }
  24. NodeIterator& operator++() { node = node->next; return *this; }
  25. };
  26.  
  27. bool operator==(const NodeIterator& lhs, const NodeIterator& rhs) {
  28. return lhs.getNode() == rhs.getNode();
  29. }
  30.  
  31. bool operator!=(const NodeIterator& lhs, const NodeIterator& rhs) {
  32. return !(lhs == rhs);
  33. }
  34.  
  35. int main() {
  36.  
  37. Node* head = new Node();
  38. head->value = 100;
  39.  
  40. Node* node1 = new Node();
  41. node1->value = 101;
  42. head->next = node1;
  43.  
  44. Node* node2 = new Node();
  45. node2->value = 102;
  46. node1->next = node2;
  47.  
  48. node2->next = nullptr;
  49.  
  50. NodeIterator headIterator(head);
  51. NodeIterator pos = std::find(headIterator, NodeIterator(), 102);
  52.  
  53. if (pos != NodeIterator())
  54. std::cout << pos->value << std::endl;
  55. else
  56. std::cout << "not found" << std::endl;
  57.  
  58. NodeIterator tmp;
  59. for (tmp ; headIterator != NodeIterator(); )
  60. {
  61. tmp = headIterator;
  62. ++headIterator;
  63. delete tmp.getNode();
  64. }
  65.  
  66. return 0;
  67. }
Success #stdin #stdout 0s 3460KB
stdin
Standard input is empty
stdout
xx102
xxxxx