我将一些几何数据作为浮点数组给出,其中三个后续浮点数构成3D中的顶点。为了更方便地工作数据,我想将其转换为vec3表示。这允许我为该结构定义运算符(或者实际上使用已经由某些库定义的运算符)。因此我不想复制或更改任何数据本身我只想改变所述数据的显示方式。然而,转换我找到的类型的方式确实似乎复制而不是引用下面测试的原始数组。
struct vec3{
float x,y,z;
};
int main() {
vector<float> input;
float* arrayInput = &input[0];
vec3* arrayOut = reinterpret_cast<vec3*>(arrayInput);
vector<vec3> output = vector<vec3>(arrayOut,arrayOut+input.size()/3);
}
如果我们做一个简单的测试用例,我们可以看到range-constructor中的数据确实会复制值。
float some[]{1,2,3,4};
vector<float> vector(some,some+4);
some[3]=5;
std::cout << vector[3] << std::endl;
(按照我的意愿返回4而不是5。)
因为我从不再次触摸输入数组是否有办法避免复制并保持向量表示的说服力?