Сравнение созданных из значения по умолчанию итераторов с оператором ==

Было указано, что последнее d цифры полного квадрата может только взять определенные значения. Последнее d цифры (в основе b) номера n совпадают с остатком, когда n разделен на b <глоток> d , т.е. в нотации n % pow(b, d).

C Это может быть обобщено к любому модулю m, т.е. n % m может использоваться для исключения некоторого процента чисел от того, чтобы быть полными квадратами. Модуль, который Вы в настоящее время используете, равняется 64, который позволяет 12, т.е. 19% остатков, как возможные квадраты. С небольшим кодированием я нашел модуль 110880, который позволяет только 2016, т.е. 1,8% остатков как возможные квадраты. Таким образом в зависимости от стоимости операции модуля (т.е. подразделение) и поиск по таблице по сравнению с квадратным корнем на Вашей машине, с помощью этого модуля могло бы быть быстрее.

Между прочим, если Java имеет способ сохранить упакованный массив битов для таблицы поиска, не используйте его. 110 880 32-разрядных слов не являются большим количеством RAM в эти дни, и выборка машинного слова будет быстрее, чем выборка единственного бита.

11
задан Adrian 27 July 2009 в 19:30
поделиться

3 ответа

Хорошо, я возьму удар. Стандарт C ++, раздел 24.1 / 5:

Итераторы также могут иметь особые значения, не связанные с любой контейнер. [Пример: после объявление неинициализированного указатель x (как с int * x;), x должен всегда предполагается иметь единственное число значение указателя. ] Результаты большинства выражения не определены для единственного числа ценности; единственное исключение - это присвоение неособого значения итератор, содержащий особую значение.

Итак, нет, их нельзя сравнивать.

15
ответ дан 3 December 2019 в 04:13
поделиться

Спецификация говорит, что постусловие конструктора по умолчанию состоит в том, что итератор сингулярный . Сравнение на равенство не определено, поэтому оно может отличаться в некоторых реализациях.

1
ответ дан 3 December 2019 в 04:13
поделиться

Я считаю, что вам следует передать функции диапазон .

void fun(std::list<int>::iterator beg, std::list<int>::iterator end)
{
    while(beg != end)
    {
        // do what you want here.
        beg++;
    }
}
1
ответ дан 3 December 2019 в 04:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: