С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 26.04.2022
Сообщений: 67

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

21.05.2024, 20:48. Показов 3120. Ответов 60
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Можно как то удалить элемент массива таким образом.
C++
1
2
3
4
5
6
7
8
9
int main()
{
    int* a1=new int[100];
    
    delete (a1+99);
 
    
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.05.2024, 20:48
Ответы с готовыми решениями:

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

Удалить из массива: а) третий элемент, б) к-й элемент. (С++ для начинающих)
С комментариями если не сложно, спасибо!

Удалить каждый K элемент массива пока не останется 1 элемент
Есть задача удалить каждый K элемент массива пока не останется 1 уцелевший. Вот пример вводим N к-лово элементов в нумерации ...

60
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6147 / 2840 / 1040
Регистрация: 01.06.2021
Сообщений: 10,349
22.05.2024, 13:56
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от DrOffset Посмотреть сообщение
Ну, типа, затем, чтобы не оставлять ТС с ответом "это невозможно, а дальше как хочешь", а предложить ему приемлемую альтернативу с той же семантикой.
Алексей1153, это так или DrOffset выдумывает?

Добавлено через 38 секунд
Цитата Сообщение от DrOffset Посмотреть сообщение
если слово "семантика" тебе не понятно, я могу объяснить
да, пожалуйста, я внимательно слушаю
0
 Аватар для SomniPhobia
602 / 439 / 137
Регистрация: 22.11.2017
Сообщений: 1,408
22.05.2024, 13:58
Мы, будучи людьми, понимаем, что
под удалением элементов со значением "48" из системы 51 52 48 0 31 подразумевается переход системы из состояния
51 52 48 0 31 9
к состоянию
51 52 0 31 9
Как понимаю я, эту операцию у людей принято называть "удаление"

Будучи программистами, мы что-то заподазриваем неладное, опускаемся глубже в реализацию - как система выполняет переход из состояния
51 52 48 0 31 9
к состоянию
51 52 0 31 9
И понимаем, что не совсем то это похоже на "удаление", что творится там под капотом
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6147 / 2840 / 1040
Регистрация: 01.06.2021
Сообщений: 10,349
22.05.2024, 13:59
DrOffset, и можно еще рассказать немного о контрактах?

Добавлено через 1 минуту
Цитата Сообщение от SomniPhobia Посмотреть сообщение
Мы, будучи людьми, понимаем, что
под удалением элементов со значением "48" из системы 51 52 48 0 31 подразумевается переход системы из состояния
51 52 48 0 31 9
к состоянию
51 52 0 31 9
т.е. при удалении появляется мусор в конце?
0
фрилансер
 Аватар для Алексей1153
6447 / 5643 / 1128
Регистрация: 11.10.2019
Сообщений: 15,016
22.05.2024, 14:01
Цитата Сообщение от Royal_X Посмотреть сообщение
Алексей1153, это так или DrOffset выдумывает?
это секретная информация
0
22.05.2024, 14:03

Не по теме:

SomniPhobia, какой милый котенок на аве)

0
 Аватар для SomniPhobia
602 / 439 / 137
Регистрация: 22.11.2017
Сообщений: 1,408
22.05.2024, 14:06
Цитата Сообщение от Royal_X Посмотреть сообщение
т.е. при удалении появляется мусор в конце?
Зависит от того, как мы реализуем удаление
Мусор может появится в конце, может появится в начале, может вообще не появляться, может все эти элементы три раза перекопируются куда-то
Есть состояние до операции 51 52 48 0 31 9
И есть состояние после операции 51 52 0 31 9
А как выполнен переход от одного состояния ко второму определяет реализация этого действия. И вопрос в том, можем ли мы это назвать "удалением"?
По факту было 51 52 48 0 31 9
стало 51 52 0 31 9
Элемент удалён или что вообще произошло?

Добавлено через 46 секунд

Не по теме:


Royal_X, спасибо за комплимент, но это Рысь

0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
22.05.2024, 14:08
Цитата Сообщение от Royal_X Посмотреть сообщение
да, пожалуйста, я внимательно слушаю
Семантика = Поведение и его Смысл.

Очевидно, что ТС не особо интересно большинство вышеозвученных нюансов, ему нужно решить задачу. Вот хочет человек вскипятить чай, и он ставит чайник - смысл (семантика) его действий - получить кипяток. Как именно работает чайник для решения этой задачи несущественная деталь. Чайник может быть газовый, электрический, солнечный, на ядерном топливе - это неважно, смысл операции - получить кипяток. Так же и здесь, в задаче ТС наверняка есть коллекция элементов, которая представлена (в его случае) массивом и возникла потребность один из элементов убрать. Это и есть смысл его вопроса.
Вектор предоставляет возможность убрать элемент из середины? Предоставляет. Смысл реализуется? Реализуется.
2
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6147 / 2840 / 1040
Регистрация: 01.06.2021
Сообщений: 10,349
22.05.2024, 14:15
Цитата Сообщение от DrOffset Посмотреть сообщение
Семантика = Поведение и его Смысл.
ясно, понял

Добавлено через 6 минут
DrOffset, но когда я использовал слово "массив" по отношению к вектору, на меня так со всех сторон жестко наехали. А ведь я руководствовался семантикой, мол что там, что там, чайник для непрерывного хранения элементов.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
22.05.2024, 14:16
Цитата Сообщение от Royal_X Посмотреть сообщение
и можно еще рассказать немного о контрактах?
Заходя к себе домой, ты открываешь дверь. На двери есть замок, и она открывается в определенную сторону. Чтобы воспользоваться возможностью зайти домой, нужно выполнить контракт двери - повернуть ключ, потянуть за ручку, открыть дверь определенным образом. Если ты сделаешь это, то реализуешь установленный контракт и достигнешь цели (смысла) этой операции - попадешь домой.

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

Также и здесь. Есть вектор и он декларирует операцию "удаление" (декларирует контракт), которая реализует семантику (поведение и его смысл) удаления элемента. Чтобы пользоваться этим не нужно знать как устрено это удаление внутри, так же как не нужно знать как работает замок, чтобы попасть домой.
2
 Аватар для SomniPhobia
602 / 439 / 137
Регистрация: 22.11.2017
Сообщений: 1,408
22.05.2024, 14:18
Как я вижу:
Массив и динамический массив - это непрерывный участок памяти с одинаковыми по типу значениями, который управляется мозгами программиста
std::vector - это непрерывный участок памяти с одинаковыми по типу значениями, который управляется мозгами std::vector, что вшиты в класс

std::vector реализует свой паттерн, механизм удаления элемента. То есть, удаление можно вызвать от объекта std::vector
Массив и динамический массив не имеют встроенных реализаций действий. Программист при желании может сам описать, как в его понимании будет происходить "удаление" элемента из массива
То есть, программист создаст некую функцию, которая будет изменять состояние памяти. Программист это назовёт "удаление", но не факт, что его поддержат другие программисты

Давайте рассуждать в нескольких плоскостях:
1. Удаление в реальности, в человеческом понимании
2. Удаление в мире программирования в целом, удаление в понимании ЭВМ
3. Удаление в рамках языка C++, в рамках его сущностей, конструкций, парадигм и договорённостей
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
22.05.2024, 14:20
Цитата Сообщение от Royal_X Посмотреть сообщение
меня так со всех сторон жестко наехали.
По-моему на тебя никто не наезжал.
Ты просто сказал, что удаление из непрерывной последовательности невозможно в принципе (и поэтому, видимо, вектор тоже не подходит, т.к. на самом деле ничего не удаляет).
А тебе просто ответили, что это не важно, потому что при оценке инструмента в первую очередь важно какое поведение он обеспечивает, а не как он внутри реализован.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6147 / 2840 / 1040
Регистрация: 01.06.2021
Сообщений: 10,349
22.05.2024, 14:22
Цитата Сообщение от DrOffset Посмотреть сообщение
По-моему на тебя никто не наезжал.
да я в добром значении этого слова. Но даже если наехали, то я зла не держу)
Цитата Сообщение от DrOffset Посмотреть сообщение
Ты просто сказал
вся проблема в том, что с самого начала я имел в виду
Цитата Сообщение от DrOffset Посмотреть сообщение
как он внутри реализован
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
22.05.2024, 14:28
Цитата Сообщение от Royal_X Посмотреть сообщение
вся проблема в том, что изначально я имел в виду как он внутри реализован
Ну а потом в контексте немножко прояснилось, что вектор и внутри реализован не как массив. Помнишь ведь?
Массив - это цельный объект, который располагается в непрерывной памяти.
А вектор - это множество объектов-элементов, которые располагаются в непрерывной памяти.
Логически, из массива нельзя удалить элемент, потому что они его неотъемлемая часть. Если ты уберешь из массива элемент, то это будет уже другой массив, другой объект. Так же как если ты уберешь поле из структуры, это будет уже другая структура. А вот вектор - это другие дело. Там ты можешь разрушить заданный элемент не трогая остальные. А то, что происходит дальше - это следствие требования на непрерывность памяти, а не следствие невозможности убить элемент из середины. Т.е. дальше, да, элементы начинают создаваться путем конструирующего копирования на месте удаленного и освобождаться на прежнем месте, что приводит к определенным накладным расходам.
0
 Аватар для Наталья8
519 / 369 / 66
Регистрация: 09.03.2016
Сообщений: 3,898
22.05.2024, 14:34
Цитата Сообщение от DrOffset Посмотреть сообщение
не нужно знать как работает замок
Читал я это где то и не единожды.
Открывая воду, не надо знать как устроен кран....
Это должен знать пьяный сантехник.
У него нету прокладки, он вставляет туда какую то хрень, которую накомунизьдил у соседа.
Берёт бабло и покупает ещё бухла.
А чем чаще менять прокладки, тем больше денег на бухло.
с++11; c++14, 17, итд.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6147 / 2840 / 1040
Регистрация: 01.06.2021
Сообщений: 10,349
22.05.2024, 14:34
Цитата Сообщение от DrOffset Посмотреть сообщение
Ну а потом в контексте немножко прояснилось, что вектор и внутри реализован не как массив. Помнишь ведь?
я там использовал слово массив в бытовом значении, особо не подбирал слова, поскольку суть моих слов была вообще не в этом. Но как говорят, в холиварах, когда нет аргументов, начинают цепляться уже за слова. Если вы посмотрите на мою активность, то я как раз на форуме всегда утверждаю, что vector это не массив. Недавно был холивар и по string, я там доже говорил, что string это не массив символов.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
22.05.2024, 14:39
Цитата Сообщение от Royal_X Посмотреть сообщение
. когда нет аргументов, начинают цепляться уже за слова. .
У меня полно аргументов.
В частности я даже не спорил, что с точки зрения памяти ничего не удаляется. Я лишь просто предложил посмотреть на это с позиции, которой раньше в теме не было.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6147 / 2840 / 1040
Регистрация: 01.06.2021
Сообщений: 10,349
22.05.2024, 14:46
Цитата Сообщение от DrOffset Посмотреть сообщение
которой раньше в теме не было.
а ведь холивары так и рождаются

Допустим стоит вопрос: можно ли решить уравнение cos(x)=x аналитически?
Я говорю, что нет.
Приходит второй, говорит: используй метод Ньютона
Я начинаю спорить, говорю "А разве метод ньютона сможет решить аналитически, это же для численного решения"
Подходит третий, говорит, что я написал "ньютон" с маленькой буквы.
Четвертый говорит, что ТС на самом деле плевать хотел на аналитическое решение, согласно семантике он просто хочет решить уравнение, а как уже не важно
Пятый приходит, говорит, что чтобы решать уравнения, нужно иметь калькулятор, и не задумываться о методах и лучше иметь много бухла и прокладок
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
22.05.2024, 14:56
Цитата Сообщение от Royal_X Посмотреть сообщение
я там использовал слово массив в бытовом значении, особо не подбирал слова, поскольку суть моих слов была вообще не в этом.
Тут много нюансов.
Вектор - это массив по семантике, он ведет себя как массив и предоставляет его функциональность (и кое-что дополнительно).
Вектор - это не массив по реализации (см. выше).

То, что возвращает realloc - это не массив по семантике, это просто память. Мы можем начать рассматривать ее как массив, но только после договоренности.

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

Ну и я все еще не уверен, что ты не смешивал на каких-то этапах нашего разговора массив и непрерывную память.

Добавлено через 7 минут
Цитата Сообщение от Royal_X Посмотреть сообщение
а ведь холивары так и рождаются
Холивары рождают люди, которые не умеют или не хотят воспринимать информацию от других людей.

Ты высказал суждение, потом пришел я и сказал, что дескать, это верно,
Цитата Сообщение от DrOffset Посмотреть сообщение
если так рассуждать, то вообще ни в каком языке ни при каких условиях удалить элемент из непрерывного массива нельзя.
но такие рассуждения ни к чему не приведут полезному (в частности в контексте темы):
Цитата Сообщение от DrOffset Посмотреть сообщение
Однако так рассуждать не нужно. В рассуждениях нужно использовать декларируемый контракт используемого средства. В контракте С-шного массива нет удаления из середины, а в контракте вектора - есть.
Т.е., проще говоря, ответ про вектор правомерен, т.к. решает задачу.

Ты же отказался это воспринять и стал меня троллить, писать про доверчивость и т.п. И вот уже начался холивар. Не раньше.
0
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
22.05.2024, 14:57
для примера возьмем строку char: удаление символа можно организовать сдвигом влево на один символ и в конце поставить символ конца строки. в нашем случае используем конструкцию
C++
1
2
 int size=100;
    int *n= new int[size];
сдвиг влево на количество удаляемых символов уменьшаем размер size на тоже количество удаляемых символов. Все что за size мусор.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6147 / 2840 / 1040
Регистрация: 01.06.2021
Сообщений: 10,349
22.05.2024, 15:02
Цитата Сообщение от DrOffset Посмотреть сообщение
Ну и я все еще не уверен, что ты не смешивал
когда я говорю, что вектор это массив, ты говоришь, что я ошибаюсь (полагая, что я имел в виду реализацию)
когда я говорю, что вектор это не массив, ты и тут говоришь, что я ошибаюсь (полагая, что я имел в виду семантику)
т.е. ты в любом случае будешь говорить, что я ошибаюсь))

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

Т.е. это и называется предвзятость
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.05.2024, 15:02
Помогаю со студенческими работами здесь

Удалить первый нулевой элемент массива и добавить после каждого чётного элемента особый элемент
Здравствуйте! Имеется такая задача: 1) Сформировать одномерный массив целых чисел, используя датчик случайных чисел. 2) Распечатать...

Удалить первый положительный элемент массива; вставить новый элемент перед первым максимальным элементом
Дан целочисленный массив размера N. Как удалить первый положительный элемент ? Как вставить новый элемент перед первым максимальным...

Удалить каждый k-ый элемент элемент массива
Условия: выделить под массив память динамически; обращаться к элементам массива, используя указатель; ограничения на функцию main 50 строк,...

Найти максимальный элемент массива и удалить его из массива, порядок других элементов сохранить
Условие Дан массив a из n элементов. Требуется найти максимум массива и удалить его из массива, порядок других элементов сохранить. Если...

Удалить строку, в которой находится максимальный элемент. Если такой элемент встречается несколько раз, то удалить все с
Дан массив В (5*5). Элементы массива ввести случайным образом. Удалить строку, в которой находится максимальный элемент. Если такой элемент...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru