将矢量<T>转换为矢量<数组<T>>

cast vector<T> to vector<array<T>>

本文关键字:lt gt 数组 转换      更新时间:2023-10-16

我有一个简单数据类型的std::向量,并希望在O(1(中将其转换为相同简单数据类型的std::数组的std∶:向量。

特别地,这两种形式都表示三角形网格的所有顶点索引的阵列。它们都包含完全相同数量的索引,顺序完全相同,只是对边界有不同的概念。

例如

std::vector<uint32_t> X;
std::vector<std::array<uint32_t, 3>> = < ??? > (X);

std::vector不是实现这一点的合适工具。std::vector拥有,因此如果您想重新解释由X作为int数组的"向量",应该使用std::span这样的非拥有容器。即便如此,您也必须使用reinterpret_cast,建议尽可能避免使用。例如:

std::span<std::array<uint32_t, 3>> points (reinterpret_cast<std::array<uint32_t, 3>*>(
X.data()), X.size()/3);

不过,请注意,根据您投射到的std::数组中的值的数量,您可能会因为填充而遇到问题:连续的数组在内存中不必相互接触。

出于所有这些原因,我建议对每个第三个元素进行迭代,或者围绕X提供一个包装类,它封装了所拥有的数据与其视图之间的强大语义纽带。这也是因为视图现在是短暂的:每当X重新分配时,都必须重新创建它。