将迭代器和向量传递给函数

6
我有一些函数。
void print_elem(const std::vector<int>::iterator it, const std::vector<int> &vec) {/*.....*/}

如果我忽略向量是原始对象的引用,我会得到向量的副本。但为什么迭代器不需要成为引用呢?例如,如果我想要遍历向量,打印每个元素,并且希望在遇到向量结尾时停止,除非我传递向量的引用,否则迭代只会持续遍历第一个向量副本。但如果我传递一个引用,迭代将通过原始向量对象进行。但为什么迭代器没有像没有引用的向量那样被复制呢?
1个回答

10

迭代器模拟指针,很可能要么就是指针本身,要么包含一个指向向量或其内容的指针。当你复制它时,副本实际上是不同的迭代器,但它存储相同的值,所以它仍然指向相同的东西,就像指针一样。


那么,将迭代器作为引用参数传递是无关紧要的吗?值得注意的是,将迭代器作为引用传递给函数会导致错误;但当它是const_iterator时,情况并非如此。你知道为什么吗?是什么区别导致后者不会出错?-谢谢。 - jlstr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接