Посмотрел я ролик Вебмани Эскроу на вашем сайте. Скукота какая-то, сразу видно, что подшаблонная. Напоминает советсткие ролики про то, как все хорошо в полях — одинаковый голос, одинаковые пейзажи, предсказуемый сюжет.
Началооось. Вот до того как учат «перегружать оба логически сопоставимые итераторы» учат более базовой вещи «перегружать только то, что имеет физический смысл». Вычитание его имеет — это расстояние. Например, мы вычитаем координаты вектора, чтобы получить его длину, или 2 временные метки (в плане просто 2 времени), чтобы получить продолжительность. А вот сложение координат или времени физического смысла не несут.
>>Например при сложении результатом давать номер позиции, которая стоит дальше от начала.
То есть переизобрести operator>?
Хорошо, Debug-режим не соответствует Стандарту. И чего? Не пользуйтесь этим «багнутым» режимом, в релизе все ок. Так что вполне логично, что как раз и разделено на 2 явных режима: дебаг и релиз, а не переключается флажками какими, так, что в релизе можно получить плохую сложность
Очень разумно. Я одно время использовал «быстрый» отладочный stl, когда никаких проверок не делалось (во всяком случае если они дорогие), зато и в дебаге несильно тормозило — и чего, куча багов вот типа того, что несортированно было позакралось.
Дебаг на то и есть дебаг.
Еще интересно, как у них (msvc) сделана проверка валидности итераторов: там контейнер имеет указатель на первый созданный итератор. И каждый итератор имеет указатель на следующий. То есть получается односвязный список итераторов. И при каждой их инвалидации (clear(), например) вектор проходит по этому списку и проставляет флажок «не валиден». Перед каждой операцией итератор его проверяет. Вопрос: почему не сделано как в Java, почему итератор сам не может обращаться к вектору, а именно вектор их инвалидирует? Ответ: потому что, если в Java итератор имеет ссылку на контейнер, то тот точно будет валиден. А в случае с плюсами, если пользователь разрушит контейнер, то итератор будет ссылаться на мусор. Подробнее можно найти на ch9.ms
Скажите, а вы на Си программировали или сразу с Си++ начали?
Все что вы описали — базовые вещи по указателям, наследниками (в общем смысле) которых и являются RA-итераторы.
И последнее: а стандарт-то вы поглядывали?
§ 24.2.1
An iterator j is called reachable from an iterator i if and only if there is a finite sequence of applications of the expression ++i that makes i == j. If j is reachable from i, they refer to elements of the same sequence.
§ 24.2.5
The domain of == for forward iterators is that of iterators over the same underlying sequence.
Пост из разряда как ВЫСТРЕЛИТЬ себе в ногу в Си++, это мы и без вас много каких способов знаем :-)
Более того, они всегда перед глазами и их не закроет открытое окно приложения.
Они более назойливы что ли, а для срочных заметок это то, что нужно.
Для просто заметок — пофиг где, да.
Поделюсь о своей работе (Яндекс):
1. Магнитофоны/пленочные диктофоны (79%)
ЭЭЭ, зачем нам диктофоны?
2. Факсы (71%)
Возможно, где-то один и есть.
3. Post-it(липкие бумажки, стикеры) (58%)
Заметки это хорошо, когда они перед глазами.
4. Стандартное рабочее время (57%)
Сегодня я пришел в 3, а ушел после полуночи. При этом последние 2 часа играл в бильярд.
5. Стационарные телефоны (35%)
ip-фоны на каждом столе, но я, например, перефорвардил все входящие в мобильник. Он-то всегда в кармане, мало ли куда отошел.
6. Стационарные компьютеры (34%)
У кого-то еще последние есть, но ноутбуки мобильние и можно из дома работать. А вот по 1-2 внешнему монитору у всех.
7. Официальная деловая одежда(костюмы, галстуки и т.д.)(27%)
Возможно есть, но не среди разработчиков совсем. Когда я пришел в таком виде на собеседоввание — выглядел просто странно.
8. USB-накопители(флешки) (17%)
Я просил мне выдать на всякий случай — сказали, что такого уже давно нет, да и зачем, все можно передать по сети.
А то, что мы видел 1176 это максимум что было на экране, но там дискретно обновлялось.
>>Например при сложении результатом давать номер позиции, которая стоит дальше от начала.
То есть переизобрести
operator>?Дебаг на то и есть дебаг.
Еще интересно, как у них (msvc) сделана проверка валидности итераторов: там контейнер имеет указатель на первый созданный итератор. И каждый итератор имеет указатель на следующий. То есть получается односвязный список итераторов. И при каждой их инвалидации (clear(), например) вектор проходит по этому списку и проставляет флажок «не валиден». Перед каждой операцией итератор его проверяет. Вопрос: почему не сделано как в Java, почему итератор сам не может обращаться к вектору, а именно вектор их инвалидирует? Ответ: потому что, если в Java итератор имеет ссылку на контейнер, то тот точно будет валиден. А в случае с плюсами, если пользователь разрушит контейнер, то итератор будет ссылаться на мусор. Подробнее можно найти на ch9.ms
Все что вы описали — базовые вещи по указателям, наследниками (в общем смысле) которых и являются RA-итераторы.
И последнее: а стандарт-то вы поглядывали?
§ 24.2.1 An iterator j is called reachable from an iterator i if and only if there is a finite sequence of applications of the expression ++i that makes i == j. If j is reachable from i, they refer to elements of the same sequence.§ 24.2.5 The domain of == for forward iterators is that of iterators over the same underlying sequence.Пост из разряда как ВЫСТРЕЛИТЬ себе в ногу в Си++, это мы и без вас много каких способов знаем :-)
Они более назойливы что ли, а для срочных заметок это то, что нужно.
Для просто заметок — пофиг где, да.
1. Магнитофоны/пленочные диктофоны (79%)
ЭЭЭ, зачем нам диктофоны?
2. Факсы (71%)
Возможно, где-то один и есть.
3. Post-it(липкие бумажки, стикеры) (58%)
Заметки это хорошо, когда они перед глазами.
4. Стандартное рабочее время (57%)
Сегодня я пришел в 3, а ушел после полуночи. При этом последние 2 часа играл в бильярд.
5. Стационарные телефоны (35%)
ip-фоны на каждом столе, но я, например, перефорвардил все входящие в мобильник. Он-то всегда в кармане, мало ли куда отошел.
6. Стационарные компьютеры (34%)
У кого-то еще последние есть, но ноутбуки мобильние и можно из дома работать. А вот по 1-2 внешнему монитору у всех.
7. Официальная деловая одежда(костюмы, галстуки и т.д.)(27%)
Возможно есть, но не среди разработчиков совсем. Когда я пришел в таком виде на собеседоввание — выглядел просто странно.
8. USB-накопители(флешки) (17%)
Я просил мне выдать на всякий случай — сказали, что такого уже давно нет, да и зачем, все можно передать по сети.
А вот само здание — офигительнейшее!