【发布时间】:2012-08-06 08:44:52
【问题描述】:
为什么下面的代码使用 non-const 迭代器 编译该行但 const 迭代器 编译失败(使用 Visual Studio 2008)?
#include <vector>
using std::vector;
int main(int argc, char* argv[])
{
vector<int> test;
test.push_back(1);
test.push_back(2);
vector<int>::const_iterator cit = test.end();
std::distance(test.begin(), cit); // error: template parameter is ambiguous
vector<int>::iterator it = test.end();
std::distance(test.begin(), it);
return 0;
}
注意:在 Visual Studio 2008 中,没有向量成员函数 cbegin() 来避免歧义,而是重载了 begin() 方法:
iterator begin()
{ // return iterator for beginning of mutable sequence
return (iterator(_Myfirst, this));
}
const_iterator begin() const
{ // return iterator for beginning of nonmutable sequence
return (const_iterator(_Myfirst, this));
}
【问题讨论】:
-
根据经验,您会发现在大多数情况下您需要使用
iterator而不是const_iterator- 有关完整说明,请参阅Effective STL #26。