Удалить элемент динамического массива c

Удалить элемент динамического массива c

для одного из моих назначений я должен создать класс, который создает динамический массив и имеет методы для добавления или удаления числа из массива, я выяснил, как сделать метод добавления, и он работает нормально, но я не могу понять, как удалить элемент и уменьшить размер массива на единицу.

Решение

Если вы хотите удалить первое вхождение, только вы можете сделать что-то подобное. Я не проверял код, но он должен быть в порядке.

Вы также можете написать функцию, которая удаляет все вхождения значения или, если @ shawn1874 предлагает удалить элемент с указанным индексом.

Другие решения

Функция add приводит к утечке памяти, потому что вы не освободили динамический массив перед назначением его новому блоку памяти. Вы также должны предоставить деструктор. Используйте delete [] вместо delete, поскольку вы выделяете массив. Условие внутри удаления не является правильным. Я думаю, что x указывает на элемент, который нужно удалить, но вы ищете элемент со значением == x. Я бы подумал, что сначала вы подтвердите, что x является допустимым индексом (меньше текущего размера), а затем используете x для циклического перехода от этого элемента к концу, копируя все элементы вперед. Затем инициализируйте ноль между currentSize и max size. Это был бы один из способов сделать это. Это похоже на домашнюю работу, поэтому я приведу только руководство, а не код. Попытайся. Исходя из того, что вы написали до сих пор, я думаю, что вы можете понять это.

Обновление: это правда, что если вы добавите деструктор, то обработка обработки копирования и присвоения (как-то) имеет решающее значение.

для одного из моих назначений мне нужно создать класс, который создает динамический массив и имеет методы для добавления или удаления числа из массива, я выяснил, как сделать метод добавления, и он отлично работает, но я не могу понять как удалить элемент и уменьшить размер массива на единицу.

Читайте также:  Wifire tv приложение для смарт тв samsung

3 ответа

Функция add теряет память, потому что вы не освободили dynamicArray, прежде чем назначать ее новому блоку памяти. Вы также должны предоставить деструктор. Используйте delete [] вместо удаления, поскольку вы выделяете массив. Условное значение внутри удаления не представляется правильным. Я бы подумал, что x указывает на удаление элемента, но вы ищете элемент со значением == x. Я бы подумал, что сначала вы должны проверить, что x является допустимым индексом (меньше текущего размера), а затем использовать x для циклического перехода из этого элемента в конец копирования всех элементов вперед. Затем нуль инициализируется между currentSize и максимальным размером. Это было бы одним из способов сделать это. Это выглядит как домашнее задание, поэтому я дам только руководство, а не код. Попробуй. На основании того, что вы написали до сих пор, я думаю, что вы можете понять это.

Обновление. Верно, что если вы добавите деструктор, который имеет конструкцию и назначение копирования (как-то), важно.

Если вы действительно хотите удалить вхождения значения, а не элемента, то я предлагаю вам сделать это аналогично тому, как remove алгоритм это делает. По существу, вы начинаете с начала, цикл и копируете вперед по согласованным значениям. Поскольку вы не имеете дело с итераторами, вам нужно будет проявить творческий подход и настроить свой текущий размер, но пример на cplusplus.com должен быть бесценным, чтобы помочь вам написать свою функцию. Хотя технически вам не нужно инициализировать эти "удаленные" слоты, я думаю, что это хорошая идея, чтобы вы не путались во время отладки. Устаревшие данные в этих неиспользуемых слотах не помогают, но это может запутаться при просмотре данных в отладчике.

Читайте также:  Youtube звук есть видео нет

Если вы хотите удалить первое вхождение, вы можете сделать что-то подобное. Я не тестировал код, но все должно быть хорошо.

Вы также можете написать функцию, которая удаляет все вхождения значения или как @shawn1874 предложила удалить элемент с указанным индексом.

Создаем динамический массив:

После добавим в него два элемента:

В деструкторе класса Array я хочу сделать сначала итерацию по всем элементам массива и для каждого отдельно вызвать delete , так как все они были созданы с помощью оператора new , а только после этого вызвать delete[] arr . Но такая конструкция не работает:

Ошибка: отсутствует оператор *, соответствующий этим операндам.

Вопрос: Как реализовать удаления указателей из динамического массива?

Ссылка на основную публикацию
Adblock detector