Como dice la pregunta, me pregunto cuál es el motivo. Porque recibo un error cuando trato de obtener la distancia entre los iteradores const
y los que no son const
.¿Por qué std :: distance no funciona en la combinación de iteradores const y nonconst?
vector<int> v;
auto it=v.begin();
auto cit=v.cbegin();
distance(it,cit);
no matching function for call to ‘distance(__gnu_cxx::__normal_iterator<int*, std::vector<int> >&, __gnu_cxx::__normal_iterator<const int*, std::vector<int> >&)
Desde mi limitada comprensión de los iteradores, no veo ninguna razón para que no debería funcionar.
hmm ¿por qué no solo crean plantillas con 2 plantillas param? ¿Es posible hacerlo en cpp core lang? Lo que estoy preguntando es ¿una decisión de diseño o una limitación de lengua? – NoSenseEtAl
para ser claros, sé que pueden hacer plantillas con 2 plantillas paramétricas, pero me pregunto si entraría en conflicto con 1 plantilla param versión – NoSenseEtAl
@NoSenseEtAl, yo diría que decisión de diseño. Es más simple de esa manera, y calcular la distancia entre iteradores de diferentes tipos (por ejemplo, un iterador de acceso aleatorio y un iterador directo) probablemente no sea algo que quieras hacer muy a menudo. De hecho, podría escribir una versión con dos argumentos de plantilla, pero ¿qué problema del mundo real resolvería? –