将1D矢量转换为2D矢量
Convert 1D vector to 2D vector
我在使用std::copy将1D矢量转换为2D矢量时出现编译错误。
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
需要一个输出迭代器,而当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);
,如果您真的对效率很迂腐的话)。
- 我是 C++ 的初学者,我想知道如何在 2D 矢量中获取重复值
- 如何在 c++ 中格式化和访问 2D 矢量数组中的数据
- 读取字符串文本输入以创建 2D 矢量
- 识别 2D 矢量C++中的位置
- Cython:无法分配给 2D 矢量
- 按列随机播放 2D 矢量
- 初始化空的 2D 矢量?
- 如何在 2d 矢量 c++ 中复制元素并将其放在原始元素旁边
- 如何访问具有地图的2D矢量?
- 通过功能进行2D矢量输入和显示
- 在C++中将对象添加到 2D 矢量
- 太空入侵者 – 2D 矢量运动算法
- 从 2 个 1D 矢量创建 2D 矢量
- 如何仅使用其中一个维度在 2D 矢量中插入值?
- 在 2D 矢量中获取多个输入时出现问题
- 2D 矢量循环 C++
- C++ 2D 矢量到 2D pybind11 数组
- 在 2D 矢量数组中的特定标头下添加数据
- 在C++中使用 2D 矢量时出现明显的内存泄漏
- 从文本文件中读取一行并将其存储在 C++ 中的 2D 矢量中