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

Passing an iterator and vector to a function

本文关键字:函数 向量 迭代器      更新时间:2023-10-16

我有一些函数

void print_elem(const std::vector<int>::iterator it, const std::vector<int> &vec) {/*.....*/}

如果我忽略了向量是对原始对象的引用,我会得到向量的副本。为什么迭代器的情况不一样?为什么迭代器不需要也是一个引用?

例如,如果我想遍历向量,打印每个元素,并希望在到达向量末尾时停止,除非我传递对向量的引用,否则迭代只会连续遍历第一个向量副本。但如果我通过一个引用,迭代就会通过原始向量对象。但是,为什么迭代器没有像没有引用的向量那样被复制呢?

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