我正在研究PLY文件阅读器(带有顶点和面部位置信息的txt文件)。它由标题,顶点位置,面信息组成。
头
-1 -1 -1 // x y z坐标
3 1 2 3 //这张脸由3个顶点组成 - 1,2,3
之后我用OpenGL绘制它。
我使用数组,现在我想使用矢量容器来节省价值。因为在编译期间我不必知道大小。
我初始化了两个载体:
vector<string> ply_file;
vector< vector<float> > vertex_list;
使用ply_file一切正常,但是当我尝试用这段代码写入vertex_list时:
int j = 0;
for(int i=first_vertex_row-1;i<first_vertex_row+vertex_number-1;i++)
{
std::stringstream ss(ply_file[i]);
ss >> vertex_list[j][0] >> vertex_list[j][1] >> vertex_list[j][2]; // x,y,z
j++;
}
但我得到调试断言失败:向量下标超出范围。
我知道我是以错误的方式写作,但我无法让它发挥作用。 是否可以使用stringstream将其写入多维向量?如果是这样,如何实现呢?
答案 0 :(得分:1)
vector< vector<float> > vertex_list;
创建一个空向量。当您尝试使用
ss >> vertex_list[j][0] >> vertex_list[j][1] >> vertex_list[j][2];
所有这些索引都超出了向量的范围。为了像这样向向量添加值,您需要将其构造为所需的大小。对于2d向量,它将具有
的形式std::vector<std::vector<some_type> some_name(rows, std::vector<some_type>(columns, value));