如何处理包含c ++列表的嵌套数据结构

时间:2014-10-30 12:44:43

标签: c++ data-structures nested

我有两个数据结构,一个包含另一个,如图所示, 我想循环所有lineSegmentClusters,访问每个的candidatePointList列表,最后访问该列表中每个的lineSegmentId。

typedef struct CandidateClusterPoint {
    float orderingValue;
    int lineSegmentId;
    bool startPointFlag;
} CandidateClusterPoint;

typedef struct LineSegmentCluster {
    int lineSegmentClusterId;                  
    int nLineSegments;                         
    list<CandidateClusterPoint> candidatePointList;                              
    vector<CMDPoint> clusterPointArray;
    bool enabled;
} LineSegmentCluster;

我尝试的是:

list<CandidateClusterPoint>::iterator iter;
for (int i = 0; i < m_currComponentId; i++)        
{

    if (m_lineSegmentClusters[i].enabled)

    {
        for(iter=m_lineSegmentClusters[i].candidatePointList.begin() ; iter!=m_lineSegmentClusters[i].candidatePointList.end() ; iter++)            
        {   

        }

但我无法访问每一个的lineSegmentID,我需要写什么才能一个接一个地访问它们?

2 个答案:

答案 0 :(得分:0)

迭代器不是您的实际结构,而是包含对它的引用的类。您可以使用*运算符访问它们,如下所示:

(*iter).lineSegmentID = <your value>;

答案 1 :(得分:0)

您是否尝试过使用指针?在LineSegmentCluster类中,将其定义为列表:

list<CandidateClusterPoint*> candidatePointList;

然后在你的main函数中执行此操作(如果不更改迭代器指向的变量,则始终使用consts):

list<CandidateClusterPoint*>::const_iterator iter;
for (int i = 0; i < m_currComponentId; i++)        
{
    if (m_lineSegmentClusters[i].enabled)
    {
        for(itertry=m_lineSegmentClusters[i].candidatePointList.begin() ; itertry!=m_lineSegmentClusters[i].candidatePointList.end() ; itertry++)           
        {   
            cout << (*iter)->lineSegmentId // This should be where you access it   
        }
     }
}