NoS*_*tAl 15 c++ iterator c++11
就像问题所说,我想知道原因.因为当我试图获得const非const迭代器之间的距离时出现错误.
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> >&)
Run Code Online (Sandbox Code Playgroud)
从我对迭代器的有限理解,我认为没有理由不应该工作.
Pra*_*ian 22
在调用中有一个可变迭代器和一个常量迭代器std::distance,因此模板参数推断失败.您可以通过显式指定模板参数来解决此问题.
std::vector<int> v;
auto i1 = v.begin();
auto i2 = v.cbegin();
auto dist = std::distance<std::vector<int>::const_iterator>( i1, i2 );
Run Code Online (Sandbox Code Playgroud)
那是因为std :: distance()只接受一个模板参数:
template <class InputIterator>
iterator_traits<InputIterator>::difference_type
distance(InputIterator first, InputIterator last);
Run Code Online (Sandbox Code Playgroud)
因此,first并且last必须可以转换为相同的类型,并且遗憾的vector<int>::iterator是模板解析不会考虑可转换为vector<int>::const_iterator.
| 归档时间: |
|
| 查看次数: |
5342 次 |
| 最近记录: |