gpt4 book ai didi

c++ - 将一维 vector 转换为二维 vector

转载 作者:行者123 更新时间:2023-11-27 23:29:51 24 4
gpt4 key购买 nike

我在使用 std::copy 将 1D vector 转换为 2D vector 时遇到编译错误。

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]) .请注意,这将调用 .push_back()std::vector<float> 上在 v2D[j] , 所以你可能还想改变 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想要一个输出迭代器,并且 std::vector<>::iteratorvector<> 中有足够数量的元素时,表现为一个覆盖。这样,您当前对 v2D 的初始化已经很理想了。


编辑:其他人在一个单独的答案中说过这个然后删除了它,所以我会代表他们说,因为它绝对值得注意:因为你初始化了 v1D有 100 个元素,然后 [1..100] 数字 push_back 附加到最初的 100 个元素(它们的指定值为 0)而不是覆盖它们。你应该改变 std::vector<float> v1D(100, 0.0);std::vector<float> v1D;获得您显然想要的行为(或者 std::vector<float> v1D; v1D.reserve(100); 如果您真的对效率很迂腐)。

关于c++ - 将一维 vector 转换为二维 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6222383/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com