
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
31.05.2006, 10:16
|
|||
|---|---|---|---|
|
|||
STL и VC++2005EE |
|||
|
#18+
Имеется консольное приложение: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Использую компиляторы mingw, BCB, VC++2005EE. Программы, созданные первыми двумя компиляторами, отрабатывают с одинаковым и предсказуемым результатом. Программа, созданная VC++2005EE, после выполнения метода erase генерирует исключение "vector iterators incompatible". При этом отладчик (как и в других компиляторах) показывает. что после удаления итератор i указывает на последний элемент вектора. Хотелось бы знать причину разницы - это недостаток или более правильная реализация STL в VC++2005? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.05.2006, 10:43
|
|||
|---|---|---|---|
STL и VC++2005EE |
|||
|
#18+
более правильная 23.2.4.3 vector modifiers iterator erase(iterator position); iterator erase(iterator first, iterator last); Effects: Invalidates all the iterator and references after the point of erase. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
01.06.2006, 09:02
|
|||
|---|---|---|---|
|
|||
STL и VC++2005EE |
|||
|
#18+
Для полноты: ну конечно, надо вместо Код: plaintext Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.06.2006, 08:59
|
|||
|---|---|---|---|
|
|||
STL и VC++2005EE |
|||
|
#18+
И все таки есть ли разумное объяснение тому, что отладчик VC2005 показывает (хотя бы на приведенном выше примере) совершенно идентичную информацию о состоянии итератора i после выполнения "правильного" Код: plaintext Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.06.2006, 10:19
|
|||
|---|---|---|---|
STL и VC++2005EE |
|||
|
#18+
kbkИ все таки есть ли разумное объяснение тому, что отладчик VC2005 показывает (хотя бы на приведенном выше примере) совершенно идентичную информацию о состоянии итератора i после выполнения "правильного" Код: plaintext Код: plaintext А ты уверен, что она идентичная? В первом случае итератор, показывать должен на следующий элемент, во втором случае - на уже отсутствующий (виолейшин мемори :) ). ЗЫ: Может я не прав. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.06.2006, 06:58
|
|||
|---|---|---|---|
|
|||
STL и VC++2005EE |
|||
|
#18+
В том то и дело, что в обоих случаях в отладчике итератор указывает на следующий элемент. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.06.2006, 10:06
|
|||
|---|---|---|---|
STL и VC++2005EE |
|||
|
#18+
На счет того, на что он указывает. Сначала надо объяснить следующую ситуацию. Когда он удалил 2-й элемент, он указывает на 3-й. При сравнении с end() будет false. Потом он инкрементируется, но все равно указывает на 3-й (в отладчике), но теперь при сравнении с end() будет true. Вроде бы ничего не изменилось при инкреминтации, но реакция совсем другая. Вполне возможно, что если не присваивать i=a.erase(i), то он "как-то не правельно" указывает, или "где-то чего-то" не отметилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.06.2006, 10:58
|
|||
|---|---|---|---|
|
|||
STL и VC++2005EE |
|||
|
#18+
Akh Тему не меняй, да ? Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.06.2006, 11:15
|
|||
|---|---|---|---|
STL и VC++2005EE |
|||
|
#18+
Карабас Барабас Тему не меняй, да ? В каком месте происходит ошибка? а? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.06.2006, 11:19
|
|||
|---|---|---|---|
|
|||
STL и VC++2005EE |
|||
|
#18+
AkhВ каком месте происходит ошибка? а? Твоя ошибка в том, что ты тему поста меняешь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=57&mobile=1&tid=2031063]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
292ms |
get topic data: |
13ms |
get forum data: |
4ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
| others: | 248ms |
| total: | 638ms |

| 0 / 0 |
