Как удалить элемент массива в си
Перейти к содержимому

Как удалить элемент массива в си

Array. Clear Метод

Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

Перегрузки

Очищает содержимое массива.

Задает для диапазона элементов в массиве значение, предусмотренное по умолчанию для каждого типа элементов.

Clear(Array)

Очищает содержимое массива.

Параметры

Массив, из которого необходимо удалить элементы.

Исключения

array имеет значение null .

Применяется к

Clear(Array, Int32, Int32)

Задает для диапазона элементов в массиве значение, предусмотренное по умолчанию для каждого типа элементов.

Параметры

Массив, элементы которого необходимо очистить.

Начальный индекс диапазона элементов, которые необходимо очистить.

Число элементов, подлежащих очистке.

Исключения

array имеет значение null .

index меньше нижней границы массива array .

Значение параметра length меньше нуля.

Сумма index и length больше, чем размер array .

Примеры

В следующем примере метод используется для сброса Clear целых значений в одномерном, двумерном и трехмерном массиве.

В следующем примере определяется TimeZoneTime структура, включающая TimeZoneInfo поле и DateTimeOffset поле. Затем он вызывает метод для очистки Clear одного элемента в массиве значений с двумя элементами TimeZoneTime . Метод задает значение очищенного элемента значением TimeZoneInfo по умолчанию объекта, т null . е. значением по умолчанию объекта, т. е. значением DateTimeOffset по умолчанию объекта.DateTimeOffset.MinValue

Комментарии

Этот метод сбрасывает каждый элемент массива в значение по умолчанию типа элемента. Он задает для элементов ссылочных типов (включая String элементы) null значение и задает элементы типов значений по умолчанию, показанные в следующей таблице.

Тип Значение
Boolean false
Все целочисленные и числовые типы с плавающей запятой 0 (ноль)
DateTime DateTime.MinValue
Другие типы значений Значение по умолчанию полей типа

Диапазон очищенных элементов из строки в строку в многомерном массиве.

Этот метод очищает только значения элементов; он не удаляет сами элементы. Массив имеет фиксированный размер; таким образом, элементы нельзя добавлять или удалять.

Удаление элементов из массива в C

Я пытаюсь выполнить цикл через массив ONCE и при этом также удалить элементы, для которых моя функция возвращает false. Однако написанный мной код не работает. Любая идея будет принята с благодарностью, потому что я действительно застрял и не понимаю, что делаю неправильно

1 ответ

Я не точно уверен, что вы пытаетесь сделать, но вы не можете изменять размер массивов в C. Вместо этого вы просто отслеживаете переменную размера и настраиваете ее соответствующим образом и печатаете только то, что вы нужно.

Однако самый простой подход, если вы пытаетесь отфильтровать определенные значения из массива, — это просто скопировать в новый массив. Итак, вот демонстрация этого. В этой демонстрации я начинаю с массива, содержащего [-3, -2, -1, 0, 1, 2, 3] , и отфильтровываю все значения -1 , 0 и +1 с помощью вашего маленького алгоритма is_it_right() , чтобы закончить с [-3, -2, 2, 3] в новом массиве, когда я закончу.

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

Удаление элементов массива

Я новичок в c, и мне было интересно, есть ли какие-либо встроенные операции для удаления указанного элемента из массива.

например, если бы я хотел удалить четные элементы в массиве

Что можно было поставить вместо .remove, чтобы убрать номер.

в отдельной заметке, если кто-нибудь знает хороший веб-сайт документации для других операций с массивами c, вы могли бы связать его?

Подсказка: вероятно, проще накопить в новом массиве. В C вообще нет функций манипулирования массивами, поэтому вам понадобится либо библиотека, либо написать код. Если вам нужно что-то менее простое, вы, вероятно, ищете C++, в котором есть стандартная библиотека и контейнеры типа массива.

Есть ли способ отслеживать четные числа, чтобы затем я мог создать новый массив только с нечетными числами?

Если вы хотите переместить их на место в одном массиве, вам понадобится способ копирования записей из одного места в другое, сжатия и увеличения счетчика «смещения» каждый раз, когда вы обнаруживаете удаление. Обратите внимание, что размер массива не изменится, распределение останется таким же, поэтому, если вам нужно его обрезать, вам нужно как-то перераспределить память. Вы можете написать здесь много кода для имитации динамических массивов, но именно так C имеет тенденцию быть на низком уровне.

Формы c голосовым вводом в React с помощью Speechly

Flatpickr: простой модуль календаря для вашего приложения на React

Что такое cURL в PHP? Встроенные функции и пример GET запроса

Ответы 2

Нет, элементы нельзя удалить из массива.

Массив имеет определенный размер с момента его создания, и этот размер нельзя изменить.

Вы можете realloc , если он динамически распределяется, но массивы, такие как int x[10] , имеют фиксированный размер.

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

Как только вы это сделаете, вы можете использовать realloc() , чтобы вырезать последний элемент массива из выделенной памяти. Вам, конечно, нужно будет выполнить математические вычисления, чтобы определить размер каждого элемента массива и передать realloc() исходный размер массива за вычетом того, который вы собираетесь «обрезать».

Другими вариантами могут быть memmove и memcopy , но тогда вы попадете во всевозможные дополнительные временные буферы.

Пример «ручного» смещения элементов массива:

Подробно: int* items — это указатель, а не множество. Полезно, чтобы учащийся знал, в чем разница и почему они кажутся похожими.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *