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

How to deal with nested data structure that contain lists in c++

本文关键字:列表 嵌套 数据结构 包含 处理 c++      更新时间:2023-10-16

我有两个数据结构,一个包含另一个,如图所示,我想在所有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我需要写些什么才能一个接一个地访问它们?

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

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

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

list<CandidateClusterPoint*> candidatePointList;

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

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   
        }
     }
}