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

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

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

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

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

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

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

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

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

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

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

9
2129 / 1212 / 503
Регистрация: 11.10.2018
Сообщений: 6,120
18.10.2018, 13:57 2
Лучший ответ Сообщение было отмечено 3C_273 как решение

Решение

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

Добавлено через 2 минуты
sourcerer, Ну это я могу, но я к олимпиаде готовлюсь и там будет некогда писать свой класс. И я ищу готовые функции
0
Заблокирован
18.10.2018, 14:06 7
Если массив состоит из элементов, для которых не требуется вызывать конструкторы и деструкторы, то можно вот так:
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Эксперт С++
5286 / 2373 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
18.10.2018, 14:07 8
3C_273, в названии темы Вы написали "НЕ используя STL". А сами просите с использованием STL. Вы уж определитесь, чего хотите.
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
19.10.2018, 01:46 9
Цитата Сообщение от 3C_273 Посмотреть сообщение
n+5; или -5 без разницы
разница есть. если размер массива A увеличиваете, создаёте массив B, копируете в него массив A и присваиваете указателю A значение B: A=B; если размер уменьшаете, просто изменяете значение n.
0
Вездепух
Эксперт CЭксперт С++
12798 / 6674 / 1796
Регистрация: 18.10.2014
Сообщений: 16,894
19.10.2018, 04:10 10
Цитата Сообщение от stu4ent2018 Посмотреть сообщение
C++
1
2
    // освобождение
    alloc<int>(0, arr);
std::realloc с размером 0 не гарантирует освобождение памяти. Что именно делает realloc с размером 0 - определяется реализацией.
1
19.10.2018, 04:10
BasicMan
Эксперт
19315 / 2622 / 84
Регистрация: 17.02.2009
Сообщений: 10,364
Блог
19.10.2018, 04:10
Помогаю со студенческими работами здесь

Модернизировать программу используя динамический массив
Модернизировать программу с помощью использование динамического массива. Вот программа: ...

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

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

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru