Advertisement
Guest User

Untitled

a guest
May 28th, 2015
252
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.62 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4.  
  5. template <typename T>
  6. class Vector
  7. {
  8. private:
  9.     int internal_size; //размер вектора
  10.     unsigned int capacity;//вместимость вектора
  11.     T* data;//указатель на массив
  12.  
  13.     void reserve(unsigned int);
  14. public:
  15.     Vector();
  16.     ~Vector();
  17.     unsigned int size();
  18.     void push_back(const T&);//Добавить элемент в конец вектора
  19.     void pop_back();//Удалить элемент в конце вектора
  20.     void erase(int);//Удалить элемент или диапазон элементов в векторе из заданных позиций
  21.     T& back();//Вернуть ссылку на последний элемент вектора
  22.     void clear();//Очистить элементы вектора
  23.     void resize(unsigned int);//Задать новый размер вектора в виде числа элементов
  24.     void assign(int, const T&);//Заменить указанные элементы на копии указанного значения или диапазона значений
  25.     unsigned int find(const T& val);
  26.    
  27.     T& operator[](unsigned int index);
  28.  
  29.  
  30. };
  31.  
  32. template<class T>
  33. Vector<T>::Vector()
  34. {
  35.     internal_size = capacity = 0;
  36.     data = NULL;
  37. };
  38.  
  39. template<class T>
  40. Vector<T>::~Vector()
  41. {
  42.     delete[] data;
  43. };
  44.  
  45.  
  46. template<class T>
  47. unsigned int Vector<T>::size()
  48. {
  49.     return internal_size;
  50. }
  51.  
  52. template<class T>
  53. T& Vector<T>::back()
  54. {
  55.     return data[internal_size - 1];
  56. }
  57.  
  58. template<class T>
  59. void Vector<T>::pop_back()
  60. {
  61.     internal_size--;
  62. }
  63.  
  64. template<class T>
  65. void Vector<T>::push_back(const T& val)
  66. {
  67.     if (internal_size == capacity)
  68.     {
  69.         if (capacity == 0)
  70.             reserve(1);
  71.         else reserve(2 * capacity);
  72.     }
  73.  
  74.     data[internal_size] = val;
  75.     internal_size++;
  76. }
  77.  
  78. template<class T>
  79. void Vector<T>::assign(int s, const T& val)
  80. {
  81.     delete[] data;
  82.     internal_size = capacity = 0;
  83.     resize(s);
  84.     for (int i = 0; i < s; ++i)
  85.     {
  86.         data[i] = val;
  87.     }
  88.  
  89. }
  90.  
  91. template<class T>
  92. void Vector<T>::clear()
  93. {
  94.     delete[] data;
  95.     internal_size = capacity = 0;
  96. }
  97.  
  98. template<class T>
  99. void Vector<T>::erase(int ind)
  100. {
  101.     for (int i = ind; i < internal_size - 1; ++i)
  102.         data[i] = data[i + 1];
  103.  
  104.     internal_size--;
  105. }
  106.  
  107.  
  108. template<class T>
  109. T& Vector<T>::operator[](unsigned int index) {
  110.     return data[index];
  111. }
  112.  
  113. template<class T>
  114. void Vector<T>::reserve(unsigned int n)
  115. {
  116.     if (n <= capacity) return;
  117.     T *new_data = new T[n];
  118.  
  119.     for (int i = 0; i < internal_size; ++i)
  120.         new_data[i] = data[i];
  121.  
  122.     capacity = n;
  123.     delete[] data;
  124.     data = new_data;
  125. }
  126.  
  127. template<class T>
  128. void Vector<T>::resize(unsigned int n)
  129. {
  130.     if (n <= internal_size)
  131.         return;
  132.  
  133.     reserve(n);
  134.     internal_size = n;
  135. }
  136.  
  137. template<class T>
  138. unsigned int Vector<T>::find(const T& val)
  139. {
  140.     unsigned int index = -1;
  141.     for (int i = 0; i < internal_size; ++i)
  142.     {
  143.         if (data[i] == val)
  144.             return i;
  145.  
  146.     }
  147.  
  148.     return index;
  149. }
  150.  
  151. int main() {
  152.     // your code goes here
  153.     Vector<int> vec;
  154.     vec.resize(10);
  155.     cout << vec.size() << endl;
  156.     for (int i = 0; i < 10; i++)
  157.         vec[i] = i;
  158.        
  159.        
  160.     vec.push_back(14); 
  161.     vec.push_back(-1);
  162.     vec.push_back(26);
  163.    
  164.     for (int i = 0; i < vec.size(); i++)
  165.         cout << vec[i] << " ";
  166.    
  167.     cout << endl << vec.find(-1) << endl;
  168.    
  169.     vec.pop_back();
  170.     for (int i = 0; i < vec.size(); i++)
  171.         cout << vec[i] << " ";
  172.        
  173.     cout << endl << vec.back() << endl;
  174.    
  175.     vec.erase(6);
  176.     for (int i = 0; i < vec.size(); i++)
  177.         cout << vec[i] << " ";
  178.        
  179.     vec.assign(10, -2);
  180.     cout << endl;  
  181.     for (int i = 0; i < vec.size(); i++)
  182.         cout << vec[i] << " ";
  183.    
  184.     vec.clear();
  185.     cout << endl << vec.size();
  186.  
  187.     return 0;
  188. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement