Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
maSt
5 / 5 / 1
Регистрация: 28.02.2010
Сообщений: 166
#1

Удалить несколько последних значений в динамическом массиве - C++

03.11.2012, 15:57. Просмотров 605. Ответов 10
Метки нет (Все метки)

Получил задание сделать задачу с использованием динамических таблиц и возник вопрос
если я объявляю массив через p = (int *)malloc(10*sizeof(int));
могу ли я как-то удалить несколько последних значений в массиве?
То есть , имея массив
1 2 3 4 5 6 7 8 9 10 , могу ли я просто убрать последние 3 значения? Чтобы размер массива с 10 стал 7?
или нужно создавать новый массив нужного размера и записывать значения туда?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2012, 15:57     Удалить несколько последних значений в динамическом массиве
Посмотрите здесь:

В динамическом массиве удалить N элементов, начиная с номера K (ошибка) - C++
Помогите, как исправить ошибку? Нужно из массива arr , который перед этим формируется рандомно. удалить N элементов начиная с номера K. у...

Ошибка в динамическом массиве - C++
Проблема при добавлении сотрудника. Первый сотрудник добавляется просто прекрасно, а вот при записи второго сотрудника выдает ошибку и...

Сдвиг в динамическом массиве - C++
Добрый день) Сразу оговорюсь что честно пользовался поиском. Если у меня проблемы со зрением - прошу указать соответствующую тему. Спасибо....

Ошибка в одноиерном динамическом массиве - C++
Здравствуйте, программа не правильно выводит на экран обработанный массив. Пункт 1 выполняется, пункт 2 выполняется, пункт 3 выполняется,...

Преобразование типов в динамическом массиве - C++
Имеется динамический массив unsigned char * buffer = new unsigned char ; size - это размер массива вычисляется отдельно ...

Музыкальная картотека в динамическом массиве - C++
Написать программу, которая позволяет хранить музыкальную картотеку в динамическом массиве. Каждая запись должна содержать: Тип...

Деление в двухмерном динамическом массиве - C++
Пользователь задает кол-во столбиков и строк. Пытаюсь сделать так, чтобы каждое число первой строке, заданное ранее - делилось на первое...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
13051 / 7314 / 814
Регистрация: 27.09.2012
Сообщений: 18,051
Записей в блоге: 3
Завершенные тесты: 1
03.11.2012, 16:01     Удалить несколько последних значений в динамическом массиве #2
Цитата Сообщение от maSt Посмотреть сообщение
Чтобы размер массива с 10 стал 7?
или нужно создавать новый массив нужного размера и записывать значения туда?
Именно! Но можете использовать realloc
maSt
5 / 5 / 1
Регистрация: 28.02.2010
Сообщений: 166
03.11.2012, 16:57  [ТС]     Удалить несколько последних значений в динамическом массиве #3
Прочитал про realloc на cplusplus , но не очень понял, как его можно тут использовать.
Можете привести пример?
kuli4ok
31 / 31 / 3
Регистрация: 10.10.2012
Сообщений: 88
03.11.2012, 17:02     Удалить несколько последних значений в динамическом массиве #4
в с++ вместо malloc лучше использовать new.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
03.11.2012, 17:48     Удалить несколько последних значений в динамическом массиве #5
Цитата Сообщение от maSt Посмотреть сообщение
Прочитал про realloc на cplusplus , но не очень понял, как его можно тут использовать.
Можете привести пример?
C
1
2
3
4
5
6
7
8
9
10
int *p = malloc(10 * sizeof(*p)); /* выделили под 10 интов */
/* ... */
int *new_p = realloc(p, 7 * sizeof(*p)); /* попытались выкинуть 3 с конца */
if (!new_p) {
    /* realloc() облажался и ничего не сделал, p указывает на тот же массив из 10 интов,
       new_p указывает в никуда */
}
else {
    p = new_p;
}
Но для Си++ действительно только один вариант: выделить новый массив, скопировать туда барахло, удалить старый массив.

Как вариант: просто тактично игнорировать последние три элемента :) Копировать придётся только при росте массива.
mmd
13 / 13 / 1
Регистрация: 17.05.2012
Сообщений: 80
03.11.2012, 18:50     Удалить несколько последних значений в динамическом массиве #6
malloc это функция из чистого си
в C++ для этого есть new
maSt
5 / 5 / 1
Регистрация: 28.02.2010
Сообщений: 166
03.11.2012, 21:15  [ТС]     Удалить несколько последних значений в динамическом массиве #7
Да у меня в задании нужно использовать malloc,realloc и так далее.
Не знаю как, но у меня получилось уменьшать количество выделенного пространства realloc'ом.

Но появилась новый вопрос.
могу ли я использовать realloc в качестве malloc'a?
то есть, будут ли равнозначны записи
C++
1
r = (int*)realloc(NULL,(R)*sizeof(int));
и
C++
1
p = (int *)malloc(R*sizeof(int));
?
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
03.11.2012, 21:51     Удалить несколько последних значений в динамическом массиве #8
Да. И в качестве free() тоже, если указать нулевой размер.
Somebody
2786 / 1600 / 145
Регистрация: 03.12.2007
Сообщений: 4,190
Завершенные тесты: 1
03.11.2012, 22:38     Удалить несколько последних значений в динамическом массиве #9
Насчёт замены free - как-то сомнительно.
Цитата Сообщение от www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf (7.22.3.1)
If the size of the space requested is zero, the behavior is implementation-defined: either a null pointer is returned, or the behavior is as if the size were some nonzero value, except that the returned pointer shall not be used to access an object.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
04.11.2012, 00:14     Удалить несколько последних значений в динамическом массиве #10
Ну, я думаю, это касается того, какой указатель вернёт realloc(). То есть она не обязательно вернёт NULL или что-то в этом роде, но вот очистить память от всех старых объектов должна (7.22.3.5/1 чуть ниже).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.11.2012, 12:37     Удалить несколько последних значений в динамическом массиве
Еще ссылки по теме:

Реализация стека в динамическом массиве - C++
Условие такое: Помогите для начала хотя бы разобраться, как реализуется стек в динамическом массиве, а то чет совсем не могу въехать с...

Поменять местами столбцы в динамическом массиве - C++
Нужно переставить местами столбцы в динамическом массиве по ключу! У меня почему-то переставляет на правильно, не могу найти ошибку,...

Удаление столбца в двумерном динамическом массиве - C++
Необходимо удалить столбец, содержащий хотя бы один ноль, из двумерного динамического массива.(матрица) Кода нет, так как выходит ерунда.

Циклический сдвиг в двумерном динамическом массиве - C++
Вот такая программа, надо сделать циклический сдвиг в двумерном динамическом массиве по такой вот схеме (см. рис). да так, чтобы В...

Работа со строками в двумерном динамическом массиве - C++
Ребят, я окончательно запутался. Вот текст задания, которое мне нужно решить: Для двумерного динамического массива написать функцию,...


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

Или воспользуйтесь поиском по форуму:
Somebody
2786 / 1600 / 145
Регистрация: 03.12.2007
Сообщений: 4,190
Завершенные тесты: 1
04.11.2012, 12:37     Удалить несколько последних значений в динамическом массиве #11
От старых объектов он память очистит, но если возвращается ненулевой указатель, то это значит, что размер этого пустого объекта всё равно где-то хранится и этот объект всё равно занимает адресное пространство (так как у другого объекта не может быть тот же адрес).
Yandex
Объявления
04.11.2012, 12:37     Удалить несколько последних значений в динамическом массиве
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru