2016-11-14 51 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); 

那麼代碼將是有效的。