Как и в этом вопросе, я задаюсь вопросом о причине этого. Потому что я получаю сообщение об ошибке, когда пытаюсь получить расстояние между const
и не-const
итераторами.Почему std :: distance не работает на смешивание итераторов const и 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> >&)
Из-за моего ограниченного понимания итераторов я не вижу причин, почему это не должно работать.
хм, почему они просто не создают шаблон с 2 шаблонами? Возможно ли это сделать в cpp core lang? Что я спрашиваю, что это дизайнерское решение или ограничение языка? – NoSenseEtAl
, чтобы быть ясным, я знаю, что они могут сделать шаблон с двумя параметрами шаблона, но Im задается вопросом, будет ли он конфликтовать с 1 шаблоном param version – NoSenseEtAl
@NoSenseEtAl, я бы сказал, дизайнерское решение. Это проще и вычисление расстояния между итераторами разных типов (скажем, итератор с произвольным доступом и форвардный итератор), вероятно, не то, что вы хотите делать очень часто. Вы действительно можете написать версию с двумя аргументами шаблона, но какая проблема в этом мире будет решена? –