Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Стандарт STL, итераторы и std::vector


Автор: rewinder 22.10.2004, 10:24
Как известно, STLport - имплементация STL, наиболее полно соответсвующая стандарту.
По адресу http://www.stlport.com/doc/debug_mode.html можно найти интересную строчку:

Цитата
Application code using T* to store vector::iterator would not compile in debug mode. Such code should be fixed - the standard does not specify vector::iterator, so different implementations can use different types for it.

Меня заинтересовал выделенный фрагмент.
Получается, что по стандарту нельзя использовать vector<>::iterator?
Как-то странно.
Кто что по этому поводу думает?

Автор: Vaulter 22.10.2004, 10:57
rewinder точный перевод курсива: стандарт не определяет vector::iterator, так разные реализации могут использовать различные типы для этого.

Автор: rewinder 22.10.2004, 11:18
Тогда как перевести весь текст полностью?
Цитата
Application code using T* to store vector::iterator would not compile in debug mode. Such code should be fixed - the standard does not specify vector::iterator, so different implementations can use different types for it.

Приложения, использующие T* для хранения vector::iterator не будут скомпилированы в дебаг-моде. Этот код надо исправить, так как стандарт не определяет vector::iterator, и разные реализации могут использовать различные типы для этого.

Не вижу тут никакой логики...

Автор: Gabryael 22.10.2004, 19:12
Цитата(rewinder)
Приложения, использующие T* для хранения vector::iterator не будут скомпилированы в дебаг-моде. Этот код надо исправить, так как стандарт не определяет vector::iterator, и разные реализации могут использовать различные типы для этого.

Не вижу тут никакой логики...

Логика здесь простая - в отладочном режиме в роли vector<T>::iterator используется не T*, а какой-то класс заместитель, назначение которого упростить тебе жизнь во время отладки. Поэтому, если ты в своей программе вместо определенного Cтандартом vector<T>::iterator будешь использовать T* - нарвешься на сообщение об ошибке. В release-mode можешь использовать T*, но это есть моветон. Лучше все таки всегда и везде в качестве типа итератора использовать тип, определенный для данного контейнера.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)