LINUX.ORG.RU

perl arrays


0

0

Хмм вроде бы в перле таблицы это списки. Но тогда почему итерация по огромной таблице раз при помощи foreach а другой раз при помощи индексов занимает примерно столько же времени?

foreach:
real 0m26.611s

with indices:
real 0m27.659s

?

Подозреваю, что обход связного списка и обход массива -- примерно равноценные (в смысле времени) операции.

anonymous
()

индекс - прямой доступ, foreach - тоже в некоторой степене, т.к. указатель на следующий элемент всегда рядом!

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

Pi ★★★★★
()

> Хмм вроде бы в перле таблицы это списки.

Это ни разу не правда. Массив - это массив (в смысле, последовательный кусок памяти, в котором лежит N струтур типа Perl_SV или как их там - ну и плюс обвязка), а "список" в перле - это синтаксическая конструкция, типа

($a, $b, $c)

а не "настоящая" структура данных.

Произвольный и последовательный доступ к элементам массива работают одинаково.

anonymous
()
Ответ на: комментарий от anonymous

так у него ж длинна изменяется, каким образом тогда это обеспечивается? и что случается, если нет непрерывного куска памяти нужной длинны?

anonymous
()
Ответ на: комментарий от anonymous

Может реалоки делает?

PS Спасибо за ответы.

dissident ★★
() автор топика
Ответ на: комментарий от anonymous

Ну у std::vector тоже размер изменяемый - однако это нифига не значит, что он реализован на связном списке...

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.