Как сделать автокопирование массива?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
VmestoMobilnika
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 19.02.2014 (Ср) 12:10

Как сделать автокопирование массива?

Сообщение VmestoMobilnika » 19.02.2014 (Ср) 12:43

Допустим, есть массив целых чисел. Надо все элементы меньше нуля превратить в нули.
Есть два очевидных способа:
1. Пройтись по исходному массиву и сделать замену. Достоинство: не тратится лишняя память. Недостаток: теряются исходные данные.
2. Сделать копию массива и произвести замену в ней. Достоинство: не теряются исходные данные. Недостаток: расход ресурсов происходит всегда, даже если ни одного элемента заменено не было.

Можно как-то оптимизировать такую функцию? Например, чтобы копия создавалась только в тот момент, когда найден первый отрицательный элемент. Если ни одного не было найдено, то из функции возвращается исходный массив. Не копия исходного массива, а сам исходный массив!

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Как сделать автокопирование массива?

Сообщение Viper » 20.02.2014 (Чт) 4:46

VmestoMobilnika писал(а):Можно как-то оптимизировать такую функцию? Например, чтобы копия создавалась только в тот момент, когда найден первый отрицательный элемент. Если ни одного не было найдено, то из функции возвращается исходный массив. Не копия исходного массива, а сам исходный массив!
Сам спросил, сам ответил. А вопрос то в чем? В реализации?
Весь мир матрица, а мы в нем потоки байтов!

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Re: Как сделать автокопирование массива?

Сообщение Vi » 20.02.2014 (Чт) 10:01

VmestoMobilnika писал(а):Можно как-то оптимизировать такую функцию? Например, чтобы копия создавалась только в тот момент, когда найден первый отрицательный элемент. Если ни одного не было найдено, то из функции возвращается исходный массив. Не копия исходного массива, а сам исходный массив!

И как ты себе представляешь такую функцию в VB? Работать с исходным массивом очень затруднительно, т.к. есть два обстоятельства: 1) в VB нет указателей и 2) в VB массив - не объект, так что в простейшем операторе a=b происходит копирование массивов. Можно передавать в функцию массив-параметр через ByRef, но он так же будет выходным и в случае необходимых изменений. Если возвращать массив как результат функции, то уже исходный массив не передать, потому что есть два обстоятельства выше.

Так что покажи в псевдокоде хотя бы, как ты хотел и что соптимизировать.

PS
В VARIANTе есть возможность или передавать значение по ссылке, или передавать реальное значение. Но работа с этим типом сложновата для VB.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Как сделать автокопирование массива?

Сообщение The trick » 20.02.2014 (Чт) 13:38

UA6527P


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 63

    TopList