Advertisement
35657

Untitled

Sep 7th, 2024
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.64 KB | None | 0 0
  1.  
  2. #include <iostream>
  3. #include <typeinfo>
  4.  
  5. using namespace std;
  6.  
  7. template <typename T>
  8. class Vector {
  9. public:
  10.  
  11.     Vector() : size(0), capacity(4), arr(new T[4]) {}
  12.  
  13.     void Push_back(const T value) {
  14.         if (size == capacity) {
  15.             T* temp = new T[capacity * 2];
  16.             for (int i = 0; i < size; i++) {
  17.                 temp[i] = arr[i];
  18.             }
  19.             delete[] arr;
  20.             arr = temp;
  21.             capacity *= 2;
  22.         }
  23.         arr[size] = value;
  24.         size++;
  25.     }
  26.  
  27.     void Insert(int index, const T value) {
  28.         if (index < 0 || index >= size) {
  29.             throw out_of_range("Невалидный индекс");
  30.         }
  31.         if (size == capacity) {
  32.             T* temp = new T[capacity * 2];
  33.             for (int i = 0; i < size; i++) {
  34.                 temp[i] = arr[i];
  35.             }
  36.             delete[] arr;
  37.             arr = temp;
  38.             capacity *= 2;
  39.         }
  40.         for (int i = size; i > index; i--) {
  41.             arr[i] = arr[i - 1];
  42.         }
  43.         arr[index] = value;
  44.         size++;
  45.     }
  46.  
  47.     void Print() {
  48.         for (int i = 0; i < size; i++) {
  49.             cout << arr[i] << " ";
  50.         }
  51.         cout << endl;
  52.     }
  53.  
  54.     ~Vector() {
  55.         delete[] arr;
  56.     }
  57.  
  58. private:
  59.     int size;
  60.     int capacity;
  61.     T* arr;
  62. };
  63.  
  64. int main() {
  65.  
  66.     setlocale(LC_ALL, "ru");
  67.  
  68.     Vector<int> vec;
  69.  
  70.     for (int i = 0; i < 5; i++) {
  71.         vec.Push_back(i + 1);
  72.     }
  73.  
  74.     vec.Print();
  75.  
  76.  
  77.     try {
  78.         vec.Insert(8, 10);
  79.     }
  80.     catch (const logic_error& ex) { // здесь ловим любые ошибки типа logic_error
  81.         cout << ex.what() << endl;
  82.     }
  83.     catch (...) {
  84.         cout << "Другая ошибка" << endl; // например сюда может попасть bad_alloc при увеличении емкости вектора в двое и нехватке на это места в оперативной памяти
  85.     }
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement