Форум программистов, компьютерный форум, киберфорум
ПерС
Войти
Регистрация
Восстановить пароль
Оценить эту запись

count++%n

Запись от ПерС размещена 27.11.2013 в 10:00

Делать кольцевой буфер в виде
C++
1
2
3
4
5
count=0;
while (1) {
 array[count++%n]=...;
 //...
}
а не классическом
C++
1
2
3
4
5
6
count=0;
while (1) {
 array[count++]=...;
 if (count==n) count=0;
 //...
}
- конечно, красивенько и выпендрёжненько... но ведь рано или поздно переполнится, count сбросится в отрицательное число и остатки от деления станут отрицательными... не надо так.
Размещено в Без категории
Показов 3351 Комментарии 3
Всего комментариев 3
Комментарии
  1. Старый комментарий
    Аватар для kazak
    А что мешает использовать беззнаковый тип для count?
    Запись от kazak размещена 09.12.2013 в 11:58 kazak вне форума
  2. Старый комментарий
    Аватар для programina
    C++
    array[count++%n]
    классная запись, нужно запомнить ее
    Запись от programina размещена 09.12.2013 в 19:42 programina вне форума
  3. Старый комментарий
    Аватар для Evg
    Чтобы не переполнилось, нужно меньше выпендриваться и писать более аккуратно. Типа

    C
    array[count] = ...;
    count = (count + 1) %n;

    Вариант с остатком от деления, ко всему прочему, гарантированно работает быстрее в случаях, когда n является степенью двойки. И с большой вероятностью работает быстрее в случаях с произвольным n. Потому что не содержит операцию условного перехода, которая обычно сильно напрягает конвейер процессора. count нужно так же сделать беззнаковым (это сгенерирует более эффективный код)
    Запись от Evg размещена 09.12.2013 в 19:49 Evg вне форума
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru