Просто вопрос об использовании const_iterator против простого итератора. В частности, с использованием расстояния(). Ниже приведен базовый код, который просто выводит список «fav_games», который вводит пользователь (ранее в приложении). Я также хотел вывести «индекс» вектора, чтобы распечатать нумерованный список.
Частичный код:
int main()
{
vector<string> fav_games;
vector<string>::const_iterator iter; // const_iterator no worky with "distance()"
if (fav_games.size() > 0) {
cout << "\n\nCurrent game list: \n";
for (iter = fav_games.begin(); iter != fav_games.end(); ++iter)
{
cout << distance(fav_games.begin(), iter) << ". " << *iter << endl;
}
}
return 0;
}
Мой вопрос в том, почему «const_iterator» не будет работать, вместо этого я вынужден использовать «iterator». Ищите «теорию», стоящую за этим. "distance()" кажется ожидающим, а "iterator" - не "const_iterator". ..Почему?
Просто для справки об ошибке компиляции, если я использую "const_iterator":
Ошибка 1 ошибка C2782: 'iterator_traits‹_Iter>::difference_type std::distance(_InIt,_InIt)': параметр шаблона '_InIt' неоднозначен z:\micah\c++\favgames\favgames\favgames.cpp 49 1 favgames
Спасибо!
distance
должен быть одинаковым (если вы выводите аргумент шаблона). Итак, в C++11 вам приходилось использовать.cbegin()
иconst_iter
. Вы также можете использовать для RandomAccessIterators-
, например.iter - fav_games.begin()
- person dyp   schedule 15.12.2014