Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> заставить vector::end отдавать const_iterator 
V
    Опции темы
borisbn
Дата 14.1.2012, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Здравствуйте.
Такой код
Код

    typedef std::vector< int > IVector;
    IVector v;
    IVector::const_iterator it = v.begin();
    int d = std::distance( it , v.end() );

в студии даёт такую ошибку
Цитата
error C2782: 'iterator_traits<_Iter>::difference_type std::distance(_InIt,_InIt)' : template parameter '_InIt' is ambiguous

на LWS - такую
Цитата
error: no matching function for call to 'distance(std::vector<int>::const_iterator&, std::vector<int>::iterator)'

http://liveworkspace.org/code/594db6b60936...7a1d450ce6e4686

Я, конечно, обошёл проблему (завёл отдельную переменную типа IVector::const_iterator для end'а, но возник вопрос: что я делаю неправильно ?
Спасибо.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
maxim1000
Дата 14.1.2012, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



std::vector<int>::cend()


--------------------
qqq
PM WWW   Вверх
borisbn
Дата 14.1.2012, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



maxim1000, хммм. В черновике стандарта C++03 этой ф-ции нет. И в студии (2008-й) тоже нет.
А вот в черновике стандарта C++11 и на LWS - есть.
Спасибо.

А можно ли как-нибудь обойти эту ситуацию не так как я сделал (мало ли - может у меня не лучшее решение), но в рамках C++03 ?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
mes
Дата 14.1.2012, 18:11 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(borisbn @  14.1.2012,  16:02 Найти цитируемый пост)
 можно ли как-нибудь обойти эту ситуацию

или конст_каст вектора,  или статиц_цаст на конст_итератор..  я б делал первое.. 




--------------------
PM MAIL WWW   Вверх
volatile
Дата 14.1.2012, 23:43 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



я бы это сделал так:
Код

    int d = std::distance <IVector::const_iterator>( it , v.end() );

работает как на студии, так и на liveworkspace.org

PM MAIL   Вверх
borisbn
Дата 15.1.2012, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



mes, volatile, спасибо. Исходя из того, что у проблемы имеется 5 (!!!) решений (моё, maxim1000, 2 у mes и volatile) я делаю вывод, что "стандартного" решения нет (кроме C++11) и можно выбрать любое - на свой вкус... Мне лично больше понравилось у volatile.
Всем откликнувшимся спасибо. Закрываю.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1197 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.