fork download
  1. #include <cstdio>
  2. #include <iostream>
  3. #include <string>
  4. #include <stdexcept>
  5. #include <sstream>
  6.  
  7. template<typename Tval_type>
  8. class List {
  9. private:
  10. typedef struct el {
  11. struct el *next;
  12. struct el *prev;
  13. Tval_type val;
  14. } el;
  15. el *first;
  16. el *last;
  17. public:
  18. List() : first(NULL), last(NULL) {}
  19. void push_back(Tval_type val) {
  20. el* n = new el;
  21. n->next = NULL;
  22. n->prev = last;
  23. n->val = val;
  24. if(!first && !last)
  25. first = n;
  26. else
  27. last->next = n;
  28. last = n;
  29. }
  30. Tval_type& get(size_t index) {
  31. el *e = first;
  32. while(index && e) {
  33. --index;
  34. e = e->next;
  35. }
  36. if(index)
  37. throw std::out_of_range("index >= list.size() :(");
  38. return e->val;
  39. }
  40. size_t size() {
  41. size_t s = 0;
  42. for(el *e = first; e; e = e->next, ++s);
  43. return s;
  44. }
  45. ~List() {
  46. el *ne, *e = first;
  47. while(e) {
  48. ne = e->next;
  49. delete e;
  50. e = ne;
  51. }
  52. }
  53. };
  54.  
  55. class Osoba {
  56. private:
  57. std::string imie;
  58. int wiek;
  59. public:
  60. Osoba() : imie(""), wiek(-1) {}
  61. Osoba(std::string imie, int wiek) : imie(imie), wiek(wiek) {}
  62. void setWiek(int wiek) { this->wiek = wiek; }
  63. void setImie(std::string imie) { this->imie = imie; }
  64. std::string toString() {
  65. std::stringstream wiekStream;
  66. wiekStream << wiek;
  67. return imie+" "+wiekStream.str();
  68. }
  69. };
  70.  
  71. int main(void) {
  72. List<Osoba> listaOsob;
  73. listaOsob.push_back(Osoba("ABC",16));
  74. listaOsob.push_back(Osoba("DEF",17));
  75. listaOsob.push_back(Osoba("GHI",18));
  76. size_t listaSize = listaOsob.size();
  77.  
  78. for(size_t i = 0; i < listaSize; ++i)
  79. std::cout << listaOsob.get(i).toString() << std::endl;
  80.  
  81. listaOsob.get(0).setWiek(26);
  82. listaOsob.get(2).setImie("zmienione GHI");
  83.  
  84. for(size_t i = 0; i < listaSize; ++i)
  85. std::cout << listaOsob.get(i).toString() << std::endl;
  86.  
  87. return 0;
  88. }
Success #stdin #stdout 0s 3436KB
stdin
Standard input is empty
stdout
ABC 16
DEF 17
GHI 18
ABC 26
DEF 17
zmienione GHI 18