Перейти к содержимому

Как уменьшить длину массива си

  • автор:

Уменьшить размер динамического массива несколько раз

А если, например, уменьшать нужно последовательно в теле цикла большое количество раз, то как поступить?

Отслеживать
51.6k 201 201 золотой знак 63 63 серебряных знака 245 245 бронзовых знаков
задан 1 июн 2018 в 16:41
758 5 5 серебряных знаков 20 20 бронзовых знаков
Лучше возьмите std::vector , тогда достаточно будет сделать resize() , shrink_to_fit() .
1 июн 2018 в 18:41

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Много раз перераспределять память и копировать элементы ни к чему. Вместо этого завести переменную, содержащую размер активной области, и уменьшать её.

А вот когда она, например, станет 1/2 или 1/4 от реального размера, тогда уже можно и выполнить реальное изменение размера.

Подобная тактика применяется и при расширении массива — сразу выделяется память с запасом, например, в полтора или два раза, и большую часть времени просто инкрементируется переменная, отвечающая за размер.

DELPHI ИЗМЕНИТЬ РАЗМЕР МАССИВА

В Delphi можно изменить размер массива с помощью процедуры SetLength . Данная процедура принимает два параметра: массив, который нужно изменить, и новую длину массива. При уменьшении размера массива данные, которые выходят за пределы нового размера, обрезаются. При увеличении размера массива все новые элементы инициализируются значениями по умолчанию.

var
arr: array[0..4] of Integer; // объявление массива размером 5
begin
SetLength(arr, 10); // увеличение размера массива до 10 элементов
end;

Программирование в Delphi Урок 5. Массивы и циклы, цикл for, глобальные переменные. Array

Урок №6 — Массивы (Часть 2 — двухмерный массив) — EmbarCadero RAD Studio 10.3

Динамический массив с++ пример. Создание, заполнение, удаление, размер динамического массива. #55

DELPHI Урок 3 Создание БД, добавление, удаление, изменение записей

#6 Программирование в Delphi. Массивы

Двумерный динамический массив c++ пример. Создание, заполнение, удаление. Динамические массивы. #56

3 урок Delphi XE (уменьшить размер проэкта)

#5. Динамический массив. Принцип работы — Структуры данных

Как уменьшить длину массива си

Рейтинг (т): 1

В Шилдте в для закрепления теория по индексаторам и свойствам рекомендуют в качестве упражения создать класс динамический массив. Но у меня возник вопрос, как лучше изменять размер массива — распределять память в свойстве Length массива или использовать отдельный метод, который будет вызыватся в свойстве Length и распределять память под другой размер массив. Возможно оба способа плохие, вы можете подсказать как лучше всего сделать. Вот как я реализовал это с помощью отдельного метода.

Класс DynamicArray

class DynamicArray

private int[] a;

private int len;

public DynamicArray(int size)

a = new int[size];

public bool Error < get; private set; >

public int Length

Console.WriteLine(«Длина массива меньше 0»);

Error = true;

Error = false;

return len;

Error = true;

Error = false;

len = value;

public int this[int index]

if (ok(index))

Error = false;

return a[index];

Error = true;

if (ok(index))

Error = false;

a[index] = value;

Error = true;

Класс DynamicArrayDemo

class DynamicArrayDemo

static void Main()

DynamicArray array = new DynamicArray(10);

Random r = new Random();

//int size = 0;

Console.WriteLine(«Длина массива до изменения: » + array.Length);

for (int i = 0; i < array.Length; i++)

Как уменьшить длину массива си

Нужно уменьшить размер массива

int size_a = 10;
int *a = new int[size_a];

Если нужно уменьшить один раз, то всё понятно: создаём ещё один массив, копируем элементы, старый удаляем

int size_b=size_a-1;
int *b = new int[size_b];
for (i=0;i <=size_b;i++)
b[i]=a[i];
delete[] a;

А если, например, уменьшать нужно последовательно в теле цикла большое количество раз, то как поступить?

novuiPolzovatel
Посмотреть профиль
Найти ещё сообщения от novuiPolzovatel

Форумчанин
Регистрация: 09.05.2017
Сообщений: 718

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

Форумчанин
Регистрация: 24.01.2011
Сообщений: 774
Дык может, они пишут shrink_to_fit какой-нибудь.
a.k.a. Angelicos Phosphoros
Мой сайт
Регистрация: 01.06.2018
Сообщений: 9
Я новичок, но возможно такая идея поможет:

// 1. Создаем точку входа в массив, с которой будем начинать последовательные изменения int mpos = 0; // Индекс элемента int mi = arr[0]; // Значение индекса элемента for (int i = 1; i < length; i++) if (arr[i] < mi) < mi = arr[i]; mpos = i; >// 2. Создаем новый массив и копируем значения индексов со сдвигом 1 int *arr = new int[length]; for (mpos; mpos < length; mpos++) // Начинаем цикл элементом с нужным значением < if (mpos != length - 1) // Если текущий элемент не равен крайнему элементу массива, копируем данные с соседнего элемента arr[mpos] = arr[mpos + 1]; else break; >/* Второе действие вставляем в условие изменения изначального массива или отдельную функцию или метод класса к примеру, смотря что там за код. Вызывем его на каждое изменение*/
Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перемешивание двумерного массива несколько раз без повторений Silveronn C++ Builder 0 20.05.2015 16:56
Как уменьшить размер фото nikolj HTML и CSS 1 27.11.2011 14:53
Размер динамического массива не через Length Sibedir Общие вопросы Delphi 10 29.08.2009 21:26
Напомните как задать размер динамического массива Arassir Помощь студентам 4 08.03.2009 13:02
уменьшить размер БД MS Access Кот из Лета БД в Delphi 7 30.12.2007 13:51

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *