#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 ;
}