繁体   English   中英

将一维向量转换为二维向量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM