2009-04-16 113 views
0

我有以下數據類型和變量:初始化變量涉及矢量數據類型

typedef Seq< vector<int> > MxInt2d; 
typedef std::vector<int> edge_t; 
typedef std::vector< edge_t> edge2d_t; 

std::vector<edge2d_t> myEdgesIntersect; 

我試圖初始化myEdgesIntersect像:

edge2d_t edge2d(2); 

//creating the vector of edges of intersections whenever an intersection is detected 
for (int i=0;i<1;i++){ 
    edge2d[0][0]=sweepEvents[i][0]; 
    edge2d[0][1]=sweepEvents[i][1]; 
    edge2d[1][0]=sweepEvents[i+1][0]; 
    edge2d[1][1]=sweepEvents[i+1][1]; 
    std::cout<<edge2d[0][0]<<" "<<edge2d[0][1]<<endl; 
    std::cout<<edge2d[1][0]<<" "<<edge2d[1][1]<<endl; 
    myEdgesIntersect.push_back(edge2d); 
    std::cout<<myEdgesIntersect[i][0][0]<<" "<<myEdgesIntersect[i][0][1] 
      <<" "<<myEdgesIntersect[i][1][0]<<" "<<myEdgesIntersect[i][1][1]<<endl; 
} 

但是使用這個語法,當我嘗試顯示變量myEdgesIntersect這個沒有使用給定值edge2d [..] [..](在顯示過程中沒問題)初始化。我試圖在push_back之前顯示變量myEdgesIntersect,並且出現總線錯誤,所以我認爲問題在於該變量未初始化。我試圖對其進行初始化,如:

edge2d_t edge2d; 
edge2d[0][0]=0; 
edge2d[0][0]=0; 
edge2d[0][0]=0; 
edge2d[0][0]=0; 
edge2d[0][0]=0; 
myEdgesIntersect.push_back(edge2d); 

,但我得到了同樣的錯誤,因爲實際上是同樣的事情,在環。顯然我不知道如何初始化這個非常複雜的變量,我真的需要。如果您有任何建議,我會更高興。

由於事先 madalina

回答

0

如果陣列大小確實被固定在編譯時則可能會更好看的2D陣列,而不是含2個2 elemnet矢量的2元素矢量。

+0

這可能會修復,避免它的問題,但它並沒有解決,爲什麼他的代碼是錯誤的。 – 2009-04-16 12:34:20

1

edge2d_t是向量的向量。在你的第一個代碼塊設置了外向量的大小,當你實例化你的edge2d變量,而不是內部的載體,所以它們的大小均爲0.1

試試這個:

edge2d_t edge2d(2); 
edge2d[0].resize(2); 
edge2d[1].resize(2); 

//creating the vector of edges of intersections whenever an intersection is detected 
for (int i=0;i<1;i++){ 
     edge2d[0][0]=sweepEvents[i][0]; 
     edge2d[0][1]=sweepEvents[i][1]; 
     edge2d[1][0]=sweepEvents[i+1][0]; 
     edge2d[1][1]=sweepEvents[i+1][1]; 
     std::cout<<edge2d[0][0]<<" "<<edge2d[0][1]<<endl; 
     std::cout<<edge2d[1][0]<<" "<<edge2d[1][1]<<endl; 
     myEdgesIntersect.push_back(edge2d); 
     std::cout<<myEdgesIntersect[i][0][0]<<" "<<myEdgesIntersect[i][0][1] 
      <<" "<<myEdgesIntersect[i][1][0]<<" "<<myEdgesIntersect[i][1][1]<<endl; 
} 
1

嘗試:

edge2d_t ev(10, edge_t(10, 0)); 

(尺寸從10更改爲適合你)

1

除了什麼約翰說,我懷疑你的「for」循環可以有一個差一錯誤:

for (int i=0;i<1;i++){ // i will only be 0 

也許你想

for (int i=0;i<=1;i++){ // i will iterate 0,1