我需要将三角形矢量转换为三倍更长的索引向量:
struct Triangle { int16_t v[3] };
std::vector<Triangle>
std::vector<int16_t>
Run Code Online (Sandbox Code Playgroud)
也许我可以以某种方式将已初始化的矢量的迭代器从它封装的原始内存中转换出来?
编辑:这是真的,我不想要任何副本.
你不能这样做.
但是你可以这样做:
std::vector<Triangle> ts;
__int16 *pvbegin = ts[0].v;
__int16 *pvend = pvbegin + 3 * ts.size();
Run Code Online (Sandbox Code Playgroud)
并使用该对pvbegin和pvend作为迭代器范围.
我不确定它不是技术性的未定义行为,但它应该可以正常工作.为了确保添加static_assert某个地方是个好主意,例如:
static_assert(sizeof(Triangle) == 3*sizeof(int16_t), "Weird sizeof(Triangle)");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
222 次 |
| 最近记录: |