И правильно говорит.
В школьных задачах никогда не ставится вопрос об экономии памяти в матричных операциях. Это делают только озабоченные дяди в конкурсных задачах, чтобы отсеять тех, кто пишет не на С++
Он говорит совершенно справедливо, только нужно слушать тему, а не вырывать фразу из контекста. Речь о том, что если алгоритм решения задачи требует множественных вставок и/или удалений элементов, то правильнее использовать не массив, а списковую структуру. Т.е. односвязный или двусвязный список в зависимости о того, что и как планируется делать с данными.
Если такая же проблема стоит с двумерными массивами в части целых строк или столбцов, то нужно делать список из строк (столбцов) . Ну а если речь о произвольных элементах - хранить метафору такой матрицы в списке, как предварительно развернутую по строкам (столбцам) в одномерный массив.
ну, если школьная - то там так и имеется в виду, по 1 элементу копировать. Но если решать её более продвинуто - то или списки, или неуправляемая память.
SetLength
создаёт новый массив и копирует в него содержимое старого. List
тоже это делает, но только если объёма во внутреннем массиве не хватило (или если изменили свойство Capacity
). А раз он делает это не каждый раз - он быстрее.
А что мешает писать на Паскале в стиле C++, кроме недовольных комментаторов?
В Паскале (классическом) работа с памятью крайне неудобно реализована и семь потов сойдет, пока правильно и эффективно все сделаешь. Вирт страшно С не любил в плане языка для обучения и наполнял его по мере возможности только высокоуровневыми конструкциями.
Вот что писал Н.Вирт по поводу компилятора: “«Наш первый компилятор Паскаля был реализован на семействе компьютеров CDC-6000 и написан на самом Паскале.”. Это с учетом того, что C давно уже существовал.
@Bronislav вот ещё, если хотите закопаться в код - исходники списка. Я, кстати, таки напутал с константами. Изначально 0, при добавлении первого элемента - 16, а потом *=2, каждый раз когда не хватает обёма.
Это как?
Мы уже обсуждали, что на олимпиадах и конкурсах пока что мало где позволяют писать на PascalABC.NET. Чтобы не отсеять тех, кто на C++ пишут.
Так… Pascal СDС-6000 позволял вставлять фрагменты на ассемблере и обращаться к фортрановским модулям.
Не знаю даже, хорошо это, или плохо. С одной стороны - плохо, язык хороший не допускают. С другой - хорошо, не допускают ведь потому, что он хороший соперник C++.
У С++ (кстати, как и и Питона) огромное лобби “наверху”. Но здесь не место для обсуждения подобных вещей.
Он ни разу не соперник. У них ниши совершенно различные. Но если С++ не проталкивать в школы на углубленку хотя бы, кое-кто лишится кормушки.
Если Вирт писал Паскаль на Паскале, то кто разработал Паскаль?
Он разработал язык и реализовал компилятор напару с Йенсеном. Вам что, в школе на информатике не давали историю языков программирования?
Представьте себе, нет. Давали что-то типа того, что Паскаль разработал Вирт в 1968 году…
Вот и я о том. Зачем же спрашивать, кто разработал Паскаль?
Да это я и так знал. Вашу формулировку просто не понял.
Это не моя формулировка, это прямые слова Н.Вирта (в переводе, конечно).
@Gleb по моему в этот раз вы перестарались. Есть конечно и сообщения не по делу, но зачем сразу всё выкидывать.
Болталку тоже читают. А в помощи новичкам этому не место.