c++ - 容器作为函数参数

标签 c++ function templates iterator containers

#include <iostream>
#include <vector>

using namespace std;

void factorial(vector<int> ivec, typename vector<int>::iterator iter) 
{
    vector<int>::iterator it;
    for (it = iter; it != ivec.end(); it++)
         cout << *it << endl;
}

int main()
{
    vector<int> ivec;
    for (int i = 1; i < 8; i++) 
        ivec.push_back(i);

    factorial(ivec, ivec.begin());

    return 0;
}

在visual studio 2015中显示,

enter image description here

但如果我让 ivec成为引用类型(vector<int> & ivec),它将成功运行。

为什么?


代码很糟糕,很糟糕,很糟糕,所以请你只关注问题。

最佳答案

因为迭代器是相对于你从中获取它们的容器的。由于您按值传递 vector ,它就像第二个 vector ,它不会发送以比较来自第一个 vector 的迭代器和来自复制 vector 的迭代器。

关于c++ - 容器作为函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44712034/

相关文章:

c++ - C++设置唯一性和顺序

c++ - 使用 For 循环构建 map

php - 如何让 PHP 理解 * 数组或函数参数的 splat 运算符(3 点 ...)?

javascript - DOM 操作与模板

匹配 smarty 语法的 javascript 模板引擎

c++ - 构建成功时 Eclipse (CDT) 中的可疑错误消息

c++ - Boost.Beast 的最小 OpenSSL 构建

javascript - 对于应该是 "1undefined"的东西,输出给出 "1function"。错误在哪里?

javascript - 在 javascript 中复制函数

c++ - 整数常量表达式中不允许使用模板参数