как мне переместить элементы вправо на единицу в массиве

#c

#c

Вопрос:

Мне нужно вставить значение в мой массив без использования векторной библиотеки. Способ вставки — заменить число в индексе, в который я хочу вставить число. Мне нужно вставить число в произвольный индекс и переместить все после индекса вправо, сохранив все значения. Я пытался сделать это, создав новый массив, но, к сожалению, безрезультатно..

     void Vector::insert(int value, int index) 
    {

      //initializing array to copy from index
      int* new_arr = new int[current];

      //copying everything from given index to the end
      for(int i = 0; i < current; i  ){
          if((arr[index 1]) != NULL){
        new_arr[i] = arr[index   i];
        }
      }   
      //replaces the given value at the given index
      arr[index] = value;      

      //copying before and after the index into one array
      int* total_arr = new int[current 1];
      //before index
      for (int i = 0; i < index; i  ){
        total_arr[i] = arr[i];
      }
      //after index
      for(int i = index; i< current 1; i  ){
        total_arr[i] = new_arr[i];
      }
    
      capacity  = 1;
      arr = new int[capacity];
      for(int i = 0; i < capacity; i  ){
        arr[i] = total_arr[i];
      }    
   
      //replaces the given value at the given index
      arr[index] = value;      

      //copying before and after the index into one array
      int* total_arr = new int[current 1];
      //before index
      for (int i = 0; i < index; i  ){
        total_arr[i] = arr[i];
      }
      //after index
      for(int i = index; i< current 1; i  ){
        total_arr[i] = new_arr[i];
      }
       for(int i = 0; i<current 1; i  ){
         std::cout<<total_arr[i]<<std::endl;
      }
     for(int i = 0; i<capacity 1; i  ){
         std::cout<<total_arr[i]<<std::endl;
     }
       capacity  = 1;
       arr = new int[capacity];
      for(int i = 0; i < capacity; i  ){
         arr[i] = total_arr[i];
       }

    }

 

Комментарии:

1.? std::rotate() ?

Ответ №1:

Ваш код выглядит слишком длинным и сложным.

Не зная спецификации вашего класса, реализация должна быть примерно такой (предполагается arr , что это указатель на массив данных и current количество элементов в массиве):

 void Vector::insert(int value, int index) 
{
    int* new_arr = new int[current 1];

    // positions of elements before insertion won't change
    for (int i = 0; i < index; i  ) new_arr[i] = arr[i];

    // the element to insert
    new_arr[index] = value;

    // positions of elements after insertion will move by one
    for (i = index; i < current; i  ) new_arr[i   1] = arr[i];

    // change the arrays
    int* old_arr = arr;
    arr = new_arr;
    delete[] old_arr;
    current  ;
}