2009-04-16 2 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 [..] [..] (которые во время отображения в порядке). Я попытался отобразить переменную myEdgesIntersect перед push_back, и у меня возникла ошибка шины, поэтому я думаю, что проблема в том, что переменная не инициализирована. Я пытался инициализировать его, как:

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); 

, но я получил ту же ошибку, как и на самом деле это то же самое, как и в цикле. По-видимому, я не знаю, как инициализировать эту довольно сложную переменную, которая мне действительно нужна. Если у вас есть предложения, я буду более чем счастлив.

заранее спасибо, Мадалины

ответ

0

Если размер массива действительно фиксируется во время компиляции, то вы можете быть лучше, глядя на 2D-массив, а не два элемента вектора, содержащего 2 2 elemnet векторов.

+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

Try:

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

(. изменение размера от 10 до чего-то, что вам подходит)

1

в дополнение к тому, что сказал Джон, я подозреваю, что ваш «за» цикл может иметь погрешность не совсем по-одному:

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

, возможно, вы хотите

for (int i=0;i<=1;i++){ // i will iterate 0,1 
Смежные вопросы