![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Циклы... [D6, Win95/98]
Agent[007] © (2004-07-01 18:52:00)Вот функция(самодельная) генерирует строку из одинаковых символов:
function GenStr(P: Char; Count: Integer): string;
var
i: Integer;
begin
for i := 1 to Count do Result := Result + P;
end;
При её обычном использовании все нормально, но вот:
for j:= 0 to 5 do Caption := 'a' +GenStr('0', 2)+ 'a';
Caption в данном слечае равен 'a' + '0'(10 штук(5 * 2)) + 'a'
ЧТО ДЕЛАТЬ???
GuAV (2004-07-03 01:53:00) [1]
> то он наверняка будет вообще на asm'е.
FillChar и так на asm'е
Amoeba (2004-07-02 18:23:00) [2]А если посмотреть библиотеку QStrings, то, если там есть аналог, то он наверняка будет вообще на asm'е.
GuAV (2004-07-02 17:41:00) [3]А ведь через FillChar вс равно быстрее чем через эту ф-цию.
Ega23 (2004-07-02 15:15:00) [4]Редкая функция. Мало кто про нее помнит.
Да я вообще не знал про такую! Теперь буду знать.
Всех функций не узнаешь...
КаПиБаРа (2004-07-02 15:08:00) [5]
> Amoeba © (02.07.04 13:20) [20]
>
> > MBo © (02.07.04 06:14) [18]
>
> Удивляюсь, что никто из мастеров до этого поста не сказал,
> что автор вопроса упорно пытается создать велосипед с квадратными
> колесами, а все дружно кинулись помогать ему в этой мартышкиной
> работе.
Редкая функция. Мало кто про нее помнит.
default (2004-07-02 13:32:00) [6]Amoeba © (02.07.04 13:29) [22]
см. [4]
там сказано про тормознутость
он ничего не ответил, видимо пофиг
Amoeba (2004-07-02 13:29:00) [7]
> Ega23 © (02.07.04 13:25) [21]
Надо было наставить на истинный путь, как это сделал MBo. Можно было и просто привести код StringOfChar и этим закрыть вопрос.
Ega23 (2004-07-02 13:25:00) [8]Amoeba © (02.07.04 13:20) [20]
А вопрос был "ЧТО ДЕЛАТЬ?", а не "КАК ПРАВИЛЬНО?"
Amoeba (2004-07-02 13:20:00) [9]
> MBo © (02.07.04 06:14) [18]
Удивляюсь, что никто из мастеров до этого поста не сказал, что автор вопроса упорно пытается создать велосипед с квадратными колесами, а все дружно кинулись помогать ему в этой мартышкиной работе.
PUser = ^TUser (2004-07-02 06:20:00) [10]
> for j:= 0 to 5 do Caption := 'a' +GenStr('0', 2)+ 'a';
Что это такое?
Это всё равно, что
for i := 1 to 100000 do
for j := 1 to 1000000 do
for k := 1 to 1000000 do
for l := 1 to 1000000 do
for m := 1 to 10000000 do
a := 0;
8)
MBo (2004-07-02 06:14:00) [11]1. Такую функцию делать бессмысленно, поскольку уже существует StringOfChar
2. ТАК функцию делать вредно ввиду ее тормознутости - нужно сразу задать длину строки, потом заполнить ее (в цикле или FillChar)
default (2004-07-01 19:34:00) [12]Ega23 © (01.07.04 19:33) [16]
100%
Ega23 (2004-07-01 19:33:00) [13]если не ошибаюсь строки, дин массивы и интерфейсы, если они локальные в методе инициализировать не надо.
Возможно. Только всё-таки предпочитаю это делать. Исторически сложилось... :о)
Тимохов (2004-07-01 19:24:00) [14]
> GuAV © (01.07.04 19:22) [14]
во-во.
именно для этого и должны быть инициализированы.
результаты типа ansistring идут как доп var параметр - не дело функции инициализировать переданные ей параметры.
GuAV (2004-07-01 19:22:00) [15]Проверил. Таки да.
> инициализируются компилятором в ''
только локальные переменные функции.
дело в том, что string'и для корректной работы reference-counting и copy-on-write должны быть инициализированны, а во что - не важно.
Тимохов (2004-07-01 19:14:00) [16]
> Ega23 © (01.07.04 19:13) [12]
если не ошибаюсь строки, дин массивы и интерфейсы, если они локальные в методе инициализировать не надо.
Ega23 (2004-07-01 19:13:00) [17]Лично я ВСЕГДА инициализирую начальные значения переменных, кроме тех случаев, когда идёт ЯВНОЕ присвоение (как счётчик цикла, например).
Тимохов (2004-07-01 19:10:00) [18]
> GuAV © (01.07.04 19:04) [7]
мое имхо говорит о том, что по умолчанию инициализируются локальные строки.
результаты нет, т.е. строка-результат - это фактически var параметр.
это явно описано в programm control в хелпе
default (2004-07-01 19:10:00) [19]GuAV © (01.07.04 19:04) [7]
Result := '' исправляет ошибку
Плохиш (2004-07-01 19:08:00) [20]
> GuAV © (01.07.04 19:04) [7]
Result не инициализируется, в связи с этим и получается [0]