Advertisement
Guest User

liste,h

a guest
Apr 15th, 2014
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.02 KB | None | 0 0
  1. #ifndef __LISTE__
  2. #define __LISTE__
  3.  
  4. #include <iostream>
  5.  
  6. template <typename T>
  7. class Liste {
  8. private:
  9.     T * _values;
  10.     int _last, _size;
  11.     bool isFull();
  12.     int find(T val);
  13.     void increase();
  14.     void decrease();
  15. public:
  16.     Liste(int size);
  17.     Liste(const Liste & l);
  18.     ~Liste();
  19.     void append(T val);
  20.     T getValueAt(int pos);
  21.     void erase(T val);
  22.     void toScreen();
  23. };
  24.  
  25.  
  26. template <typename T>
  27. Liste <T >::Liste(int size) {
  28.     _size = size;
  29.     _last = 0;
  30.     _values = new T[size];
  31. }
  32. template <typename T>
  33. Liste <T >::~Liste() {
  34.     delete[] _values;
  35. }
  36. template <typename T>
  37. T Liste <T >::getValueAt(int pos) {
  38.     if (pos < 0 || pos >= _last)
  39.         throw Exception("out of bounds ");
  40.     return _values[pos];
  41. }
  42. template <typename T>
  43. void Liste <T >::append(T val) {
  44.     if (isFull())
  45.         increase();
  46.     _values[_last] = val;
  47.     _last += 1;
  48. }
  49. template <typename T>
  50. bool Liste <T >::isFull() {
  51.     return _last == _size;
  52. }
  53. template <typename T>
  54. void Liste <T >::increase() {
  55.     T *tmp = new T[_size * 2];
  56.     for (int i = 0; i < _size; i++)
  57.         tmp[i] = _values[i];
  58.     delete[] _values;
  59.     _values = tmp;
  60.     _size *= 2;
  61. }
  62. template <typename T>
  63. void Liste <T >::toScreen() {
  64.     for (int i = 0; i < _last; i++)
  65.         std::cout << i << ": " << _values[i] << endl;
  66. }
  67. template <typename T>
  68. int Liste <T >::find(T val) {
  69.     for (int pos = 0; pos < _last; pos++)
  70.         if (_values[pos] == val)
  71.             return pos;
  72.     return -1;
  73. }
  74. template <typename T>
  75. void Liste <T >::decrease() {
  76.     _size /= 2;
  77.     T *tmp = new T[_size];
  78.     for (int i = 0; i < _size; i++)
  79.         tmp[i] = _values[i];
  80.     delete[] _values;
  81.     _values = tmp;
  82. }
  83. template <typename T>
  84. void Liste <T >::erase(T val) {
  85.     int pos = find(val);
  86.     if (pos == -1)
  87.         throw Exception(" value not found ");
  88.     for (; pos < _last - 1; pos++)
  89.         _values[pos] = _values[pos + 1];
  90.     _last -= 1;
  91.     if (_last < _size / 4)
  92.         decrease();
  93. }
  94. template <typename T>
  95. Liste <T >::Liste(const Liste & l) {
  96.     _size = l._size;
  97.     _last = l._last;
  98.     _values = new T[_size];
  99.     for (int i = 0; i < _last; i++)
  100.         _values[i] = l._values[i];
  101. }
  102. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement