Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

Не могу найти ошибку с подсчетом суммы элементов в интервале[a,b] в динамическом одномерном массиве массиве. - C++
#include <iostream> #include <conio.h> #include <stdlib.h> #include <time.h> #include <iomanip> #include <stdio.h> #include...

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

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

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

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

10
Croessmah
Ушел
13768 / 8018 / 924
Регистрация: 27.09.2012
Сообщений: 19,739
Записей в блоге: 3
Завершенные тесты: 1
03.11.2012, 16:01 #2
Цитата Сообщение от maSt Посмотреть сообщение
Чтобы размер массива с 10 стал 7?
или нужно создавать новый массив нужного размера и записывать значения туда?
Именно! Но можете использовать realloc
0
maSt
5 / 5 / 1
Регистрация: 28.02.2010
Сообщений: 166
03.11.2012, 16:57  [ТС] #3
Прочитал про realloc на cplusplus , но не очень понял, как его можно тут использовать.
Можете привести пример?
0
kuli4ok
32 / 32 / 3
Регистрация: 10.10.2012
Сообщений: 88
03.11.2012, 17:02 #4
в с++ вместо malloc лучше использовать new.
0
OhMyGodSoLong
~ Эврика! ~
1245 / 994 / 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;
}
Но для Си++ действительно только один вариант: выделить новый массив, скопировать туда барахло, удалить старый массив.

Как вариант: просто тактично игнорировать последние три элемента :) Копировать придётся только при росте массива.
1
mmd
13 / 13 / 1
Регистрация: 17.05.2012
Сообщений: 80
03.11.2012, 18:50 #6
malloc это функция из чистого си
в C++ для этого есть new
0
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));
?
0
OhMyGodSoLong
~ Эврика! ~
1245 / 994 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
03.11.2012, 21:51 #8
Да. И в качестве free() тоже, если указать нулевой размер.
0
Somebody
2797 / 1608 / 148
Регистрация: 03.12.2007
Сообщений: 4,203
Завершенные тесты: 3
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.
0
OhMyGodSoLong
~ Эврика! ~
1245 / 994 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
04.11.2012, 00:14 #10
Ну, я думаю, это касается того, какой указатель вернёт realloc(). То есть она не обязательно вернёт NULL или что-то в этом роде, но вот очистить память от всех старых объектов должна (7.22.3.5/1 чуть ниже).
0
Somebody
2797 / 1608 / 148
Регистрация: 03.12.2007
Сообщений: 4,203
Завершенные тесты: 3
04.11.2012, 12:37 #11
От старых объектов он память очистит, но если возвращается ненулевой указатель, то это значит, что размер этого пустого объекта всё равно где-то хранится и этот объект всё равно занимает адресное пространство (так как у другого объекта не может быть тот же адрес).
0
04.11.2012, 12:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.11.2012, 12:37
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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