Guest User

Untitled

a guest
Jan 6th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.13 KB | None | 0 0
  1. struct FooNode
  2. {
  3. explicit FooNode(const Foo& ielement): element(ielement) {}
  4.  
  5. // Stores a 'Foo'.
  6. Foo element;
  7.  
  8. // Points to the next foo available; either the
  9. // next used foo or the next deleted foo.
  10. int next;
  11. };
  12.  
  13. class Foos
  14. {
  15. // Stores all the Foo nodes.
  16. vector<FooNode> nodes;
  17.  
  18. // Points to the first used node.
  19. int first_node;
  20.  
  21. // Points to the first free node.
  22. int free_node;
  23.  
  24. Foos(): first_node(-1), free_node(-1)
  25. {
  26. }
  27.  
  28. void insert(const Foo& element)
  29. {
  30. int index = free_node;
  31. if (index != -1)
  32. {
  33. free_element = data[index].next;
  34. data[index].next = first_node;
  35. data[index].element = element;
  36. first_node = index;
  37. }
  38. else
  39. {
  40. FooNode new_node(element);
  41. new_node.next = first_node;
  42. first_node = data.size() - 1;
  43. data.push_back(new_node);
  44. }
  45. }
  46.  
  47. void erase(int n)
  48. {
  49. if (first_node == n)
  50. first_node = data[n].next;
  51. data[n].next = free_node;
  52. free_node = n;
  53. }
  54. };
Add Comment
Please, Sign In to add comment