插入对象以设置c ++

时间:2016-04-19 05:39:13

标签: c++ vector

我有以下功能来处理类型为Start_Vertex的点(在一组点中):

void handleStartVertex(Vertex vi)
{

    cout << "start Vertex begins ######################################################################################" << endl;
    cout << "Handling start " << vi << vertexType[vi.type] <<  endl;
    HalfEdge *ei = vi.incidentEdge;
    std :: vector<HalfEdge > :: iterator it,itprev;
    cout << "Origin of the incident Edge " << *(ei->origin) << endl;
    //INSERT EI IN TOW AND SET HELPER AS VI
    ei->setHelper(&vi);
    tow.push_back(*ei);

    cout << "Content of Tow in START_VERTEX" << endl;
    for(it = tow.begin();it != tow.end();it++)
        cout << "origin of edge " << *((*it).origin) << " Helper "  << *((*it).helper) << endl;
    cout << "start Vertex stops ######################################################################################\n\n" << endl;
}

其中两个是:

vector<HalfEdge >  tow;  

问题是当我设置Edge的辅助器并将其推入矢量拖曳时,对于先前存在的所有边缘,辅助器变为当前推动的边缘的辅助器。我不明白为什么会这样?任何工作都值得赞赏。以下是一些可以使问题更清晰的结果。

开始Vertex开始############################################ ############################### 处理开始(2,9)START_VERTEX 事件边缘起源(2,9)

START_VERTEX中的拖车内容
边缘的起源(6,12)  助手(2,9)

边缘的起源(9,11)  助手(2,9)

边缘的起源(2,9)  助手(2,9)

start Vertex stop ############################################ ################################


我应该得到的正确结果是: 边缘的起源(6,12)助手(6,12)

边缘起源(9,11)助手(9,11)

边缘的起源(2,9)助手(2,9)

1 个答案:

答案 0 :(得分:0)

Vertex vi在函数返回时被销毁。您正在将助手设置为Vertex vi占用的内存,当您执行最后一次打印时,此内存将被Vertex(2,9)占用。将指向Vertex vi的指针作为函数的输入传递:

void handleStartVertex(Vertex* vi)
{
...
}