想麻烦问问看函数模板的形参到底应该什么时候传递const引用,什么时候使用复制。
例如:
template
void printl(Iterator v1, Iterator v2) //正确的
{
while(v1 != v2){
cout << *v1++ <<endl;
}
template
void printl(const Iterator &v1, const Iterator &v2) //错误的
{
while(v1 != v2){
cout << *v1++ <<endl;
}
主函数:
int main()
{
vector vec;
vec.push_back(1); vec.push_back(2); vec.push_back(3);
printl(vec.begin(),vec.end());
return 0;
}
为什么这里形参用迭代器的引用会出错呢。谢谢。
因为你有*v1++,这会修改迭代器,所以const就会报错。
因为const限制了你v1、v2指针不变,而你使用*v1++改变了指针,所以自然报错了
先 iter1 = vec.begin(); iter2 = vec.end();
然后再printl(iter1, iter2);
还有那个const去掉
个人理解
来晚一步的结果,就是这样啊,学习了!