tranerius

12. Динамический массив. Удаление и добавление элемента

Dec 11th, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.53 KB | None | 0 0
  1. #include <iostream>
  2. #include <ctime>
  3. template<class T1, class T2>
  4. void FillArray(T1 *arr, T2 size);
  5. template<class T1, class T2>
  6. void ShawArray(T1 *arr, T2 size);
  7. template<class T1, class T2, class T3, class T4>
  8. void push_back(T1 *&arr, T2 &size, const T3 place, const T4 value) {
  9.     T1 *newArray = new T1[size + 1];
  10.     if (place == 0) {
  11.         for (int i = 1; i < size + 1; i++) {
  12.             newArray[i] = arr[i - 1];
  13.         }
  14.     }
  15.     else if (place == size - 1) {
  16.         for (int i = 0; i < place; i++) {
  17.             newArray[i] = arr[i];
  18.         }
  19.         newArray[size] = arr[size - 1];
  20.     }
  21.     else if (place == size) {
  22.         for (int i = 0; i < size; i++) {
  23.             newArray[i] = arr[i];
  24.         }
  25.     }
  26.     else {
  27.         for (int i = 0; i < place; i++) {
  28.             newArray[i] = arr[i];
  29.         }
  30.         for (int i = place + 1; i < size + 1; i++) {
  31.             newArray[i] = arr[i - 1];
  32.         }
  33.     }
  34.     newArray[place] = value;
  35.     size++;
  36.     delete[]arr;
  37.     arr = newArray;
  38. }
  39. template<class T1, class T2, class T3>
  40. void pop_back(T1 *&arr, T2 &size, const T3 place) {
  41.     size--;
  42.     T1 *newArray = new T1[size];
  43.     if (place == 0) {
  44.         for (int i = 0; i < size; i++) {
  45.             newArray[i] = arr[i + 1];
  46.         }
  47.     }
  48.     else if (place == size + 1) {
  49.         for (int i = 0; i < size; i++) {
  50.             newArray[i] = arr[i];
  51.         }
  52.     }
  53.     else {
  54.         for (int i = 0; i < place; i++) {
  55.             newArray[i] = arr[i];
  56.         }
  57.         for (int i = place + 1; i < size + 1; i++) {
  58.             newArray[i - 1] = arr[i];
  59.         }
  60.     }
  61.     delete[]arr;
  62.     arr = newArray;
  63. }
  64. int main() {
  65.     setlocale(LC_ALL, "ru");
  66.     srand(time(NULL));
  67.     int size, place, num;
  68.     std::cout << "Введите размер массива ";
  69.     std::cin >> size;
  70.     if (size == 0) {
  71.         return 0;
  72.     }
  73.     int *arr = new int[size];
  74.     FillArray(arr, size);
  75.     ShawArray(arr, size);
  76.     do {
  77.         std::cout << "Где нужно разместить значение(0-" << size << ")? ";
  78.         std::cin >> place;
  79.     } while (place > size || place < 0);
  80.     std::cout << "Какое значение добавить? ";
  81.     std::cin >> num;
  82.     push_back(arr, size, place, num);
  83.     ShawArray(arr, size);
  84.     do {
  85.         std::cout << "Какой элемент нужно удалить(0-" << size - 1 << ")? ";
  86.         std::cin >> place;
  87.     } while (place > (size-1) || place < 0);
  88.     pop_back(arr, size, place);
  89.     ShawArray(arr, size);
  90.     delete[] arr;
  91.     arr = nullptr;
  92.     system("pause");
  93. }
  94. template<class T1, class T2>
  95. void FillArray(T1 *arr, T2 size) {
  96.     for (int i = 0; i < size; i++) {
  97.         arr[i] = rand() % size;
  98.     }
  99. }
  100. template<class T1, class T2>
  101. void ShawArray(T1 *arr, T2 size) {
  102.     for (int i = 0; i < size; i++) {
  103.         std::cout << arr[i] << "\t";
  104.     }
  105.     std::cout << std::endl;
  106. }
Advertisement
Add Comment
Please, Sign In to add comment