Форум: "Основная";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];
ВнизДвумерный массив Найти похожие ветки
← →
Separator © (2005-11-24 10:27) [0]Как проще всего сделать двумерный массив, чтобы потом легко изменять его размеры, удалять и вставлять строки, и столбцы?
← →
tesseract © (2005-11-24 10:34) [1]Может дерево с двумя ветками?
← →
Separator © (2005-11-24 10:43) [2]не пойдет, дерево с двумя ветками, это n*2 значений
а мне надо n*m значений
← →
umbra © (2005-11-24 10:47) [3]одномерный массив nxm элементов. индексы известны, удалять легко
← →
Sandman29 © (2005-11-24 10:47) [4]Список списков.
← →
Separator © (2005-11-24 10:51) [5]
> umbra © (24.11.05 10:47) [3]
А при изменении размера?
← →
Separator © (2005-11-24 10:51) [6]
> umbra © (24.11.05 10:47) [3]
А при изменении размера?
← →
Separator © (2005-11-24 11:03) [7]Допустим первоначально не известно максимальное количество элементов в строке или в столбце.
Например, я считываю файл с данными и мне нужно паралельно их анализировать и заполнять массив, количество элементов в строке не известно и может быть разным по отношению к разным строкам, но в результате мне нужно получить двумерный массив, а недостающие элементы просто заполнить нулями.
В данном случае одномерный массив не подойдет, просто не удобно будет расширять его.
← →
umbra © (2005-11-24 11:13) [8]можно сделать массив ссылок на одномерные массивы (строки), они могут быть произвольной длины.
← →
begin...end © (2005-11-24 11:15) [9]> Separator © (24.11.05 10:27)
> легко изменять его размеры, удалять и вставлять строки,
> и столбцы?
Типичные требования, которым удовлетворяет связанный список. В смысле, [4].
> umbra © (24.11.05 11:13) [8]
Двумерный динамический массив.
← →
umbra © (2005-11-24 11:22) [10]2 begin...end © (24.11.05 11:15) [9]
кто бы сомневался, я не буду :)
просто, как я понял, автор хочет легко удалять и строки, и столбцы, что совсем уж легко не получится никак
← →
Separator © (2005-11-24 11:29) [11]про удаление знаю что сложно, пока нужно только произвольное наращивание
← →
begin...end © (2005-11-24 11:34) [12]> Separator © (24.11.05 11:29) [11]
Добавление элементов в концы строк (столбцов)? Тогда [8].
← →
Separator © (2005-11-24 11:51) [13]В общем так:
var
M: array of array of Integer;
begin
SetLength(M, 3, 4);
//заполняем, потом хочу увеличить так
SetLength(M, 5, 4);
// Данные сохранятся? А если так?
SetLength(M, 6, 5);
//Массив просто разрастется?
end;
← →
begin...end © (2005-11-24 11:52) [14]> Separator © (24.11.05 11:51) [13]
Да, в обоих приведённых случаях данные сохранятся.
← →
Separator © (2005-11-24 11:59) [15]как такой массив расположен в памяти?
допустим в одномерных массивах при удалении элемента в середине просто с помощью move сдвигал данные "на лево" и конец отсекал SetLength
А тут так можно сделать?
← →
begin...end © (2005-11-24 12:17) [16]> Separator © (24.11.05 11:59) [15]
Ну, что такое одномерный динамический массив, думаю, понятно. Это указатель на память, в котором последовательно расположены элементы массива. Двумерный динамический массив можно рассматривать как динамический массив, элементами которого являются динамические массивы.
Пример:
var
A: array of array of Integer;
begin
SetLength(A, 2, 5);
end.
Здесь переменная A -- это указатель на память, в которой последовательно расположены две ссылки (указателя) на "внутренние" массивы. В свою очередь, эти ссылки указывают на области памяти, в каждой из которых размещено (непрерывно) по 5 элементов типа Integer. Поэтому, если речь идёт про удаление элемента в пределах одного самого внутреннего массива (например, A[1][2]), то это можно сделать сдвигом:
Move(A[1, 3], A[1, 2], 2 * sizeof(Integer));
SetLength(A[1], Pred(Length(A[1])));
но при этом нет никаких оснований утверждать, что первые 5 Integer-элементов (т.е. тело массива A[0]) находятся по соседству с другими 5 элементами (телом массива A[1]).
← →
Separator © (2005-11-24 12:20) [17]ясно, спасибо
← →
Separator © (2005-11-24 12:23) [18]В общем, сдвигаю move во всех ветках и потом общим SetLength уменьшаю, также при удалении в корне
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.013 c