[英]Convert 1D vector to 2D vector
使用 std::copy 将一维向量转换为二维向量时出现编译错误。
int main()
{
std::vector< std::vector<float> > v2D(10, std::vector<float>(10, 0.0));
std::vector<float> v1D(100, 0.0);
for (int i = 0; i < 100; ++i)
v1D.push_back(i);
for (unsigned int j = 0; j < 10; j++)
{
std::copy(v1D.begin() + j * 10, v1D.begin() + (j + 1) * 10, std::back_inserter(v2D[j].begin()));
}
}
你能帮忙解决这个问题吗? 谢谢你。
std::back_inserter
采用容器,而不是迭代器。 将std::back_inserter(v2D[j].begin())
更改为std::back_inserter(v2D[j])
。 请注意,这将在v2D[j]
的std::vector<float>
上调用.push_back()
,因此您可能还想更改std::vector< std::vector<float> > v2D(10, std::vector<float>(10, 0.0));
到std::vector< std::vector<float> > v2D(10);
.
或者,您可以将std::back_inserter(v2D[j].begin())
更改为v2D[j].begin()
。 这是因为std::copy
需要一个 output 迭代器,并且当 vector vector<>
> 中有足够数量的元素可以覆盖时, std::vector<>::iterator
的行为就像一个迭代器。 而这样一来,你当前的v2D
初始化就已经很理想了。
编辑:其他人在一个单独的答案中说这个然后删除它,所以我会代表他们说,因为它绝对值得注意:因为你用 100 个元素初始化v1D
,然后你push_back
的 [1..100] 数字被附加到最初的 100 个元素(它们的指定值为 0)而不是覆盖它们。 你应该改变std::vector<float> v1D(100, 0.0);
到std::vector<float> v1D;
得到你显然想要的行为(或者std::vector<float> v1D; v1D.reserve(100);
如果你真的对效率很迂腐)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.