2016-11-14 53 views
0

我想通过值传递两个向量并对它们进行一些计算。我有点困惑为什么以下不起作用。我想我们这出了好几个小时-.-通过值/参考传递向量,并从中获取迭代器

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 &,而不是常量Matrix_t直到那一刻,我意识到,我没有改变它们在函数内部传递的值也不错,但它也不工作。

编译器打印出一段关于转换错误的文字。这就是我不会在这里复制它的原因。

+0

你不能改变'const'参数吗? –

+1

不是这样。你正在试图复制类型为'vector '的元素,并且元素为int# –

+0

omg -.-你完全正确,我只是添加了索引并且一切正常。非常感谢!我完全监督这... –

回答

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); 

那么代码将是有效的。