像问题所述,我想知道原因。因为当我尝试获取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 2012-03-08 18:17:59
要清楚,我知道他们可以用2个模板参数制作模板,但是我想知道它会与1个模板参数版本 – NoSenseEtAl 2012-03-08 18:18:55
@NoSenseEtAl发生冲突,我会说设计决定。这样做更简单,并且计算不同种类的迭代器(例如,一个随机访问迭代器和一个前向迭代器)之间的距离可能不是您想要经常执行的操作。你确实可以用两个模板参数来编写一个版本,但是解决什么现实世界的问题呢? – 2012-03-08 18:23:10