按值/引用传递向量并从中获取迭代器

时间:2016-11-14 17:42:36

标签: c++ c++11 vector iterator implicit-conversion

我希望按值传递两个向量并使用它们进行一些计算。我有点困惑为什么以下不起作用。我现在试图解决这个问题几个小时了--.-

typedef std::vector<std::vector<int> > Matrix_t;
...
void vector_product(const Matrix_t mc, const Matrix_t mp, Matrix_t& r){
  std::vector<int> _mc(5);
  std::vector<int> _mp(5);
  _mc.insert(_mc.begin(), mc.begin(), mc.end());
  _mp.insert(_mp.begin(), mp.begin(), mp.end());
}

我也尝试用Matrix_t&amp; amp;而不是const Matrix_t直到我意识到我不必在函数内部更改它们并且传递值也很好,但它也不起作用。

编译器会打印出一系列有关转换错误的文本。这就是我不能在这里复制它的原因。

1 个答案:

答案 0 :(得分:2)

迭代器返回的局部向量和向量具有不同的value_type。

迭代器返回向量,而局部向量的元素是标量整数。

这些局部向量的值类型?定义如

std::vector<int> _mc(5);
std::vector<int> _mp(5);

int,而迭代器返回的对象的值类型是std::vector<int>

如果您要声明像

这样的本地向量
std::vector<std::vector<int>> _mc(5);
std::vector<std::vector<int>> _mp(5);

然后代码才有效。