Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
 Аватар для 3C_273
42 / 29 / 14
Регистрация: 09.06.2018
Сообщений: 147

Как расширить динамический массив НЕ используя stl

18.10.2018, 13:52. Показов 2619. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
То есть создал я массив:

int *arr = new int[n] n-какое-то значение

А дальше я хочу сделать массив arr длиной, n+5; или -5 без разницы, просто надо изменить длину.

И желательно чтобы переменный хранящиеся в массиве остались в нём.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.10.2018, 13:52
Ответы с готовыми решениями:

Свой класс вектор. Как расширить динамический массив
#include <iostream> using namespace std; template<typename T> class Vector { private: int current; int* m; int...

Расширить динамический массив
Есть програмка в которой можно внести даные про оформленые заявки на оренду машин. Каждая заявка ето обьект класа tz, Масив заявок...

Как можно расширить STL своим набором функций?
За предисловие сгодится то что я запорол контест из-за того, что юзал STL типа a.find(b) != string::npos Когда нормальные решения были...

9
 Аватар для FFPowerMan
2156 / 1236 / 508
Регистрация: 11.10.2018
Сообщений: 6,257
18.10.2018, 13:57
Лучший ответ Сообщение было отмечено 3C_273 как решение

Решение

Ну как обычно. Создаете новый массив, переписываете туда данные со старого массива. Удаляете старый массив оператором delete []arr. - Кажется так, не помню точно или просто delete arr. Посмотрите примеры в Интернете.
1
 Аватар для 3C_273
42 / 29 / 14
Регистрация: 09.06.2018
Сообщений: 147
18.10.2018, 14:01  [ТС]
FFPowerMan, Спасибо,я понял. А не знаете, можно ли в stl одной функцией это сделать
0
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
18.10.2018, 14:02
del
1
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
18.10.2018, 14:02
3C_273, ну создайте обёртку над динамическим массивом. В смысле, свой пользовательский класс DynamicArray или Vector. Тут на форуме тысячи таких тем - просто потрудитесь страницу вниз колёсиком мыши пролистать.
0
 Аватар для 3C_273
42 / 29 / 14
Регистрация: 09.06.2018
Сообщений: 147
18.10.2018, 14:05  [ТС]
n1b1ru, Спасибо за помощь

Добавлено через 2 минуты
sourcerer, Ну это я могу, но я к олимпиаде готовлюсь и там будет некогда писать свой класс. И я ищу готовые функции
0
Заблокирован
18.10.2018, 14:06
Если массив состоит из элементов, для которых не требуется вызывать конструкторы и деструкторы, то можно вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <cstdlib>
#include <iostream>
 
template<typename type>
type* alloc(int size, type* memory = nullptr) {
    type* new_memory = (type*) realloc(memory, size * sizeof(type));
    if (!new_memory && (size != 0)) {
        throw std::bad_alloc();
    }
    return new_memory;
}
 
int main() {
    int n = 5;
    
    // выделение памяти
    int* arr = alloc<int>(n);    
    
    // увеличение размера
    arr = alloc<int>(n + 3, arr);
    
    // уменьшение размера
    arr = alloc<int>(n - 3, arr);
    
    // освобождение
    alloc<int>(0, arr);
    
    return 0;
}
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
18.10.2018, 14:07
3C_273, в названии темы Вы написали "НЕ используя STL". А сами просите с использованием STL. Вы уж определитесь, чего хотите.
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
19.10.2018, 01:46
Цитата Сообщение от 3C_273 Посмотреть сообщение
n+5; или -5 без разницы
разница есть. если размер массива A увеличиваете, создаёте массив B, копируете в него массив A и присваиваете указателю A значение B: A=B; если размер уменьшаете, просто изменяете значение n.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,218
19.10.2018, 04:10
Цитата Сообщение от stu4ent2018 Посмотреть сообщение
C++
1
2
    // освобождение
    alloc<int>(0, arr);
std::realloc с размером 0 не гарантирует освобождение памяти. Что именно делает realloc с размером 0 - определяется реализацией.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.10.2018, 04:10
Помогаю со студенческими работами здесь

Используя STL контейнер set заполнить массив
Задание 2. Данную задачу решить не используя метод sort, а используя STL контейнер: set. Заполнить массив размером 10 случайными числами от...

Модернизировать программу используя динамический массив
Модернизировать программу с помощью использование динамического массива. Вот программа: #include &lt;iostream&gt; int main() ...

Используя динамический массив, обработать элементы
Дан массив целых чисел из n элементов. Удалить из него все элементы, в записи которых последняя цифра равна 0.

Можно ли инициализировать динамический массив не используя цикл?
Когда создавали статический массив, можно было сделать так: int array={1,5,14,23,32,45,67}; Можно ли такое же сделать с динамическим...

Вычислить объем конуса используя динамический массив
Напишите код, пожалуйста. Задание: Вычислить объем конуса с использованием динамических массивов, вводя размер массива с клавиатуры


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru