我有一个std::vector<glm::vec3>
,我希望从中获取一个类型为float的数组指针。
如果std :: vector内容为:
std::vector[0] = vec3(0.1f, 0.2f, 0.3f)
std::vector[1] = vec3(0.4f, 0.5f, 0.6f)
std::vector[2] = vec3(0.7f, 0.8f, 0.9f)
然后这就是数组指针将返回的指定当前索引:
array[0] = 0.1f
array[1] = 0.2f
array[2] = 0.3f
array[3] = 0.4f
array[4] = 0.5f
array[5] = 0.6f
array[6] = 0.7f
array[7] = 0.8f
array[8] = 0.9f
如果可行,实现它的最常用方法是什么?
答案 0 :(得分:4)
std::vector<glm::vec3> vec;
vec.push_back(glm::vec3(0.1f, 0.2f, 0.3f));
vec.push_back(glm::vec3(0.3f, 0.4f, 0.5f));
vec.push_back(glm::vec3(0.7f, 0.8f, 0.9f));
float *flat_array = &vec[0].x;
for(int i=0; i<9; i++)
std::cout << flat_array[i] << std::endl;
假设glm :: vec3包含三个紧密排列的浮点数,您可以获得指向第一个vec的第一个元素的指针。该指针可以像数组一样索引。
请注意glm :: vec3是否包含双精度或其他成员变量。在这种情况下,指针魔法会失败。
答案 1 :(得分:1)
正如上面评论中的humbletim所指出的,我会使用glm / gtc / type_ptr.hpp中定义的glm :: value_ptr
std::vector<glm::vec3> vec;
vec.push_back(glm::vec3(0.1f, 0.2f, 0.3f));
vec.push_back(glm::vec3(0.3f, 0.4f, 0.5f));
vec.push_back(glm::vec3(0.7f, 0.8f, 0.9f));
float* flat_array = static_cast<float*>(glm::value_ptr(vec.front()));
std::cout << std::endl;
for (int i = 0; i < vec.size()*(vec.front().length()); ++i ) {
std::cout << flat_array[i] << std::endl;
}