【问题标题】:Passing an iterator and vector to a function将迭代器和向量传递给函数
【发布时间】:2013-09-02 07:29:07
【问题描述】:

我有一些功能

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

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

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

【问题讨论】:

    标签: c++ vector


    【解决方案1】:

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

    【讨论】:

    • 那么,将迭代器作为参考参数传递是否无关紧要?值得注意的是,将迭代器作为对函数的引用会导致错误。但当它是一个 const_iterator 时,情况并非如此。你碰巧知道为什么吗?导致后者不出错的区别是什么? -谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多