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

Есть ли способ изменить {3, 5, 3, 6} на {3, 5, 6} с помощью функции? Я проверил все форумы по Arduino, но они не дают нужного мне ответа (просто удалите 1 элемент из массива с помощью такой функции, как delete(myArray, 2)).

, 👍1


2 ответа


0

В C++ массивы представляют собой структуры данных фиксированной длины. Нет возможности удалить элемент. Однако вы можете заменить его недопустимым элементом.

,

Итак, существует ли тип, похожий на массив данных, который можно изменить?, @Nobert

Динамические объекты — не лучшая идея для устройств с ограниченным объемом памяти, таких как Arduino. Придумайте значение «это пространство намеренно оставлено пустым» и сохраните его в местоположении, чтобы удалить элемент. (0 и -1 являются обычным выбором для пустой записи, как упоминает Маженко в своем ответе.), @Duncan C


3

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

Итак, вы могли:

  • Подсчитывайте количество записей в массиве
  • Перемешать все записи на один пробел, чтобы неиспользуемая была в конце
  • Уменьшить количество записей

Таким образом, в вашем примере {3, 5, 3, 6} становится {3, 5, 6, 6}, а ваш "count" удерживает 3, чтобы сказать, что первые три записи действительны, и игнорировать последнюю.

В качестве альтернативы вы можете ввести понятие "конец массива". Строки C делают это с помощью символа NULL (0). Все, что предшествует этому символу, является допустимым, а все, что начинается после этого символа, игнорируется. Итак, скажем, вы назначили значение -1 «концом массива». вы могли бы получить после повторного перетасовки значений: {3, 5, 6, -1}.

Вы также можете указать -1 (или любой другой вариант по вашему выбору), указывающий на "недопустимый" запись, поэтому ваш массив будет {3, 5, -1, 6}, и вы проигнорируете запись -1 в своем коде.

,

Использование недопустимого значения (по сравнению со значением конца массива) сохраняет перетасовку значений для перезаписи освободившегося пространства, но добавляет некоторые накладные расходы, поскольку индексация массива больше не будет работать должным образом, но потребует обхода массива и подсчета допустимых значений. до i-го. Некоторые приложения могут выиграть (те, которые просто хранят данные, но не индексируют их, или в любом случае редко) по сравнению с теми, которые много индексируют, но мало удаляют., @JRobert