【问题标题】:Pass vector by value/reference and get iterator from it通过值/引用传递向量并从中获取迭代器
【发布时间】:2017-03-28 10:38:00
【问题描述】:

我想通过值传递两个向量并用它们做一些计算。我有点困惑为什么以下不起作用。我想弄清楚这几个小时了-.-

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& 而不是 const Matrix_t 来执行此操作,直到我意识到我不必在函数内部更改它们并且按值传递也可以,但它也不起作用。

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

【问题讨论】:

  • 不能更改const参数?
  • 不是这样的。您正在尝试将 vector&lt;int&gt; int 类型的元素复制到带有元素 int 的向量
  • omg -.- 你完全正确,我刚刚添加了索引,一切正常。真的非常感谢!!!我完全监督了这个......
  • 我认为最好关闭这个问题..这对任何人都没有帮助,但谢谢你们

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


【解决方案1】:

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

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

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

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

int,而迭代器返回的对象的值类型是std::vector&lt;int&gt;

如果你想声明局部向量

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

那么代码就是有效的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 2014-09-19
    • 2014-12-26
    • 2010-10-14
    • 1970-01-01
    • 2018-09-17
    • 2015-12-18
    相关资源
    最近更新 更多