У меня два таких определений типов:STL итераторы StD :: расстояние (ошибка)
typedef std::vector<int> Container;
typedef std::vector<int>::const_iterator Iter;
В задаче, которую я считаю, я выполнить некоторые операции по Container Input
, и после того, что я хотел бы вычислить std::distance(Input.begin(),itTarget)
, где itTarget
имеет тип Iter
. Но я получаю эту ошибку компилятора no instance of function template "std::distance" matches the argument list
, и только после литья, т. Е. std::distance(static_cast<Iter>(Input.begin()),itTarget)
все работает нормально.
Интересно, почему?
Это потому, что 'begin()' не возвращает 'const_iterator'? –
Но как-то он должен уметь? http://www.cplusplus.com/reference/vector/vector/begin/ –
Так работают перегрузки 'const' и non'const'. Только если 'Input' является' const'-квалифицированным, будет вызываться перегрузка 'const'. Кроме того, вместо того, чтобы отличать итератор, вы можете вызвать тип шаблона: 'std :: distance (Input.begin(), itTarget)' –