|
|
|
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:16 |
|
||
|
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2006, 10:43 |
|
||
|
STL и VC++2005EE
|
|||
|---|---|---|---|
|
#18+
Для полноты: ну конечно, надо вместо Код: plaintext Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2006, 09:02 |
|
||
|
STL и VC++2005EE
|
|||
|---|---|---|---|
|
#18+
И все таки есть ли разумное объяснение тому, что отладчик VC2005 показывает (хотя бы на приведенном выше примере) совершенно идентичную информацию о состоянии итератора i после выполнения "правильного" Код: plaintext Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2006, 08:59 |
|
||
|
STL и VC++2005EE
|
|||
|---|---|---|---|
|
#18+
kbkИ все таки есть ли разумное объяснение тому, что отладчик VC2005 показывает (хотя бы на приведенном выше примере) совершенно идентичную информацию о состоянии итератора i после выполнения "правильного" Код: plaintext Код: plaintext А ты уверен, что она идентичная? В первом случае итератор, показывать должен на следующий элемент, во втором случае - на уже отсутствующий (виолейшин мемори :) ). ЗЫ: Может я не прав. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2006, 10:19 |
|
||
|
STL и VC++2005EE
|
|||
|---|---|---|---|
|
#18+
В том то и дело, что в обоих случаях в отладчике итератор указывает на следующий элемент. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2006, 06:58 |
|
||
|
STL и VC++2005EE
|
|||
|---|---|---|---|
|
#18+
На счет того, на что он указывает. Сначала надо объяснить следующую ситуацию. Когда он удалил 2-й элемент, он указывает на 3-й. При сравнении с end() будет false. Потом он инкрементируется, но все равно указывает на 3-й (в отладчике), но теперь при сравнении с end() будет true. Вроде бы ничего не изменилось при инкреминтации, но реакция совсем другая. Вполне возможно, что если не присваивать i=a.erase(i), то он "как-то не правельно" указывает, или "где-то чего-то" не отметилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2006, 10:06 |
|
||
|
STL и VC++2005EE
|
|||
|---|---|---|---|
|
#18+
Akh Тему не меняй, да ? Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2006, 10:58 |
|
||
|
STL и VC++2005EE
|
|||
|---|---|---|---|
|
#18+
Карабас Барабас Тему не меняй, да ? В каком месте происходит ошибка? а? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2006, 11:15 |
|
||
|
STL и VC++2005EE
|
|||
|---|---|---|---|
|
#18+
AkhВ каком месте происходит ошибка? а? Твоя ошибка в том, что ты тему поста меняешь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2006, 11:19 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=349&tid=2031063]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
66ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
| others: | 239ms |
| total: | 415ms |

| 0 / 0 |
