2015-12-18 81 views
-1

我正在處理PLY文件閱讀器(帶有頂點和麪孔位置信息的txt文件)。它由頭部,頂點位置,面部信息組成。向量下標超出範圍的多維向量

-1 -1 -1 // XYZ座標

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

當斷言發生時,「i」和「j」的值是什麼?各個矢量的範圍是? –

+0

使它「工作」(使用一個小代碼示例)* * *維矢量,它將全部變得清晰。 –

+0

您沒有向我們展示使用'vector :: push_back','vector :: insert','vector :: resize'等調整向量的大小。現在,您聲明瞭兩個空向量,然後顯示代碼他們好像他們充滿了數據。這不是一個完整的例子。 – PaulMcKenzie

回答

1

vector< vector<float> > vertex_list;創建一個空向量。當您嘗試向其中插入值時

ss >> vertex_list[j][0] >> vertex_list[j][1] >> vertex_list[j][2]; 

所有這些索引超出了向量的範圍。爲了向像這樣的向量添加值,您需要將其構建爲所需的大小。對於二維矢量,它的形式如下:

std::vector<std::vector<some_type> some_name(rows, std::vector<some_type>(columns, value)); 
+0

是的!那正是我所錯過的:-)。什麼應該「價值」包含? – ToKra

+0

@ToKra您可以選擇任何內容,但對於使用0作爲默認值的數字類型。 – NathanOliver

+0

謝謝,現在它可以工作。 我主要使用這個: std :: vector > vertex_list(vertex_number,std :: vector (3,0));我主要使用 調整大小: vertex_list.resize(vertex_number,vector (3)); – ToKra