初始化涉及矢量数据类型的变量

时间:2009-04-16 12:25:06

标签: c++

我有以下数据类型和变量:

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

4 个答案:

答案 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 :(得分:1)

尝试:

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

(将大小从10改为适合你的东西。)

答案 2 :(得分: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

答案 3 :(得分:0)

如果您的数组大小在编译时确实是固定的,那么您最好不要查看2D数组,而不是包含2 2个elemnet向量的2元素向量。