2009-04-16 21 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

ご使用のアレイサイズは、実際にコンパイル時に固定されている場合、あなたは2次元配列ではなく、2つの2 elemnetベクトルを含む2要素ベクトルを見たほうが良いかもしれません。

+0

をしたいです。 –

1

edge2d_tは、ベクターのベクターです。あなたがではなく、内側のベクトルをごedge2d変数をインスタンス化するとき、あなたの最初のコードブロックでは、彼らはすべてのサイズですので、0

これを試して、外側のベクトルの大きさを設定します。

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

をジョンが言ったことに加えて、ループがoff-by-oneエラーを有することができる「の」私はあなたの疑い:

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

おそらくあなたはおそらくそれを避けることによって、問題を解決するだろうが、彼のコードが間違っている理由、それは対応していない

for (int i=0;i<=1;i++){ // i will iterate 0,1 
関連する問題