c++ vector stl iterator distance

c++ - Error STL iterators std:: distance()



vector (2)

Tengo esos dos tiposdefs:

typedef std::vector<int> Container; typedef std::vector<int>::const_iterator Iter;

En el problema que considero, realizo algunas operaciones en Container Input , y después me gustaría calcular std::distance(Input.begin(),itTarget) , donde itTarget es del tipo Iter . Pero obtengo este error del compilador de que no instance of function template "std::distance" matches the argument list , y solo después de la conversión, es decir, std::distance(static_cast<Iter>(Input.begin()),itTarget) todo funciona bien

Me pregunto, ¿por qué es así?



Input.begin() devuelve un iterator lugar de un const_iterator , y su segundo argumento es un const_iterator , por lo que los dos argumentos son básicamente de un tipo diferente. Puede usar cbegin() si tiene acceso a las características de C ++ 11.

Una segunda forma de hacerlo: cada iterador es convertible en un const_iterator por asignación

std::vector<int> myVector(100); std::vector<int>::iterator it = myVector.begin(); std::vector<int>::const_iterator cit = it;

Si tiene que empacar cosas en la llamada de función, podría usar algo de magia de lanzamiento:

std::distance( ((const Container*)&Input)->begin(), itTarget );

Si Input es const, el compilador se ve obligado a usar la versión const de begin (), que devuelve un const_iterator.