int *ptr_Array;
ptr_Array = new int[5];
Можно ли удалить последний элемент в массиве?
Я могу нажать толчки по одному за раз.
Я могу удалить весь массив.
delete []ptr_Array;
ptr_Array = NULL;
Я не могу найти способ отключить элементы.
Я попробовал следующее и множество других попыток.
ptr_Array[i_IastItem] = NULL;
Я просто не могу понять, я пытался весь день.
Вы можете с помощью std::vector
вместо.
std::vector<int> x;
x.push_back(42);
x.pop_back();
Если вам нужно изменить размер массива на то, что больше или меньше того, что вы уже распределили, вы должны перераспределить его. Там не так много вариантов для этого:
Вы создаете, изменяете размер и уничтожаете массив, используя malloc()
, realloc()
, а также free()
,
Вы создаете массив с new[]
и заполните его, затем создайте еще один массив нового размера new[]
и заполните его соответственно, и, наконец, delete[]
Старый.
Тогда, конечно, вы могли бы использовать std::vector
но вы уже заявили, что не хотите этого делать.
Операционная система выделяет блоки памяти одновременно. Если вам нужно больше памяти, вам не гарантируется, что смежные области памяти будут доступны для использования, поэтому вам придется перераспределить все это + дополнительное пространство снова. Выделение части массива также обычно не поддерживается. Я не знаю специфики, почему, но я предполагаю, что это вероятно, потому что это сделало бы разделение памяти намного более трудным, если бы каждая программа могла выделить больше, чем ей нужно, и затем освободить память, которую она не делит на мелкие кусочки здесь и там. Вы бы в конечном итоге фрагментировали вашу память повсюду. Освобожденная память, вероятно, не будет полезна другим программам просто потому, что вы освобождаете память по частям — вы не можете поместить программу, массив или что-либо еще в эту маленькую дыру.
Простой код, чтобы просто удалить последний элемент:
int size = /* insert size of array here */;
int new_ptr* = new int[size-1];
int i;
for (i = 0; i < size-1; ++i) {
new_ptr[i] = ptr_Array[i];
}
delete[] ptr_Array;
ptr_Array = new_ptr;
Там, что вы хотели, сделано. ptr_Array
теперь массив тех же значений в том же порядке, за исключением того, что последний элемент был удален, а массив имеет размер меньше 1 до этого.
Но если честно, я согласен с другими ответчиками и думаю, что вы должны использовать std::vector
в C ++. Массивы могут быть головной болью, особенно потому, что вам всегда нужно отслеживать его размер в другой переменной.
Если вы хотите извлекать и перемещать элементы по своему усмотрению, в любом месте, как вам угодно, прочитайте о классе std :: vector.
Массив не может ничего вставлять или выталкивать из него. Массивы в C ++ имеют фиксированный размер, и хотя вы можете дать им иллюзию наличия операторов push / pop, сам массив не имеет их.