我有以下数据类型和变量:
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 :(得分: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元素向量。