Как удалить строку из массива c

от admin

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

Третий пункт решается просто — вам нужно передвинуть элементы в массиве: присвоить a[i]=a[i+1] в цикле.
Я думаю, вам запрещено использовать STL, так что пишите циклы.

Формат данного сайта запрещает совмещать кучу вопросов в один, так что постарайтесь разделить темы.

  • Facebook
  • Вконтакте
  • Twitter

Olej

В массивы C/C++ нельзя ничего добавлять и из них нельзя ничего удалять, массивы C/C++ статические.
Можно только создавать новые массивы, «похожие» на своих предшественников, где будет элементов больше или меньше . и каждый раз — копирование всех нужных элементов.

Добавлю:
— по п.п.4-5 — наслаждайтесь (случайные числа я генерить не стал — так нагляднее):

— а чтобы вою было меньше . исполняем:

— кстати, тот же трюк (без всяких malloc()) можете проделать и в современном C 😉

C ++ Как удалить конкретную строку или столбец в динамически размещенном 2d массиве?

Если это не имеет смысла для вас напрямую, попробуйте прочитать мой 2D динамический массив (C) . Сосредоточиться на фигуре:

введите описание изображения здесь

Я знаю, что моя ссылка на C, но то, что вы пытаетесь сделать, напоминает мне о C. В C ++, вы можете использовать std::vector<int> вместо.

Я предполагаю, что вы знаете, что вы можете написать:

Пример удаления первой строки в матрице из двух строк.

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

Вы можете удалить строку, просто позвонив

Вы не можете удалить столбцы, так как столбцы не выстроены в линию, как строки.
Например, допустим, у нас есть двумерный массив, подобный этому:

В компьютере данные на самом деле выстроены так:

Удалить ряд легко, так как компьютер выстроил их рядом друг с другом. Но поскольку строки создаются динамически, они НЕ должны располагаться рядом друг с другом. Они размещены везде, где есть свободное место.

Таким образом, столбцы не выстроены в очередь, и нет смысла «освобождать».

С 2D массивом векторов это просто.
Просто используйте функцию стирания для строк.
Для столбцов выполните итерации по строкам и удалите каждый элемент:

How to delete an element from an array in C#

How can I delete an element by «name»? , lets say number 4?

Even ArrayList didn’t help to delete?

12 Answers 12

If you want to remove all instances of 4 without needing to know the index:

LINQ: (.NET Framework 3.5)

Non-LINQ: (.NET Framework 2.0)

If you want to remove just the first instance:

LINQ: (.NET Framework 3.5)

Non-LINQ: (.NET Framework 2.0)

Edit: Just in case you hadn’t already figured it out, as Malfist pointed out, you need to be targetting the .NET Framework 3.5 in order for the LINQ code examples to work. If you’re targetting 2.0 you need to reference the Non-LINQ examples.

Читать:
Idle pc gns3 что это

Как удалить строку из 2D-массива в C?

Как удалить определенную строку из матрицы, сохранив тот же порядок? Пример:

Скажем, мне нужно удалить строку со всеми четными элементами, поэтому после удаления она должна выглядеть так:

Я сам пробовал писать код (условие не такое, как я упоминал выше!), Но на самом деле он не работает должным образом:

4 ответа

Ваш метод не работает, потому что вы изменяете матрицу на месте, соответственно обновляете индекс i и количество строк no_of_rows , но не можете обновить отдельный массив prosjeci . Когда строка соответствует фильтру, все последующие строки в матрице удаляются.

Вы можете решить эту проблему, используя отдельный индекс для матрицы и массива фильтров:

В качестве альтернативы, если вы можете обновить массив фильтрации, вы можете сделать это:

Я пытался сделать то, что вы имели в виду ..

Я не вижу ничего плохого в вашем коде.

В комментариях кто-то попросил вас опубликовать «Минимальный, полный и поддающийся проверке пример». Вот что это значит. Я усовершенствовал вашу программу, добавив объявление и инициализацию вашего массива matrica и других переменных, изменив условие в соответствии с вашим примером и распечатав массив в конце. В итоге я получил вот что:

Так что было бы лучше, если бы вы вообще опубликовали что-то подобное.

Но когда я компилирую и запускаю эту программу, она работает отлично. (Я не удивлен — как я уже сказал, я не вижу в этом ничего плохого.)

Итак, какова бы ни была ваша проблема, она в том, чего вы нам не показали. Что вы имели в виду, когда сказали «на самом деле это не работает должным образом»? Что вы ожидали увидеть, а что вместо этого?

[P.S. Есть еще одна проблема с вашим вопросом. Пока вы не спросите лучше, я даже не должен на него отвечать. Этот мой ответ был отклонен, чтобы напомнить мне об этом факте. Я не жалуюсь; Я этого ожидал. Но, пожалуйста, в следующий раз задайте более полный и ответственный вопрос.]

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

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

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

Также плохой практикой является одновременное изменение управляющих переменных цикла for в его теле и в самом операторе for. Это затрудняет чтение кода.

Похожие статьи