代码之家  ›  专栏  ›  技术社区  ›  Andrew Truckle

向函数传递stl::vector迭代器项

  •  0
  • Andrew Truckle  · 技术社区  · 7 年前

    我有以下定义:

    typedef struct tagDemoEntryAssign
    {
        COleDateTime datMeeting;
        CString      strAssignment;
        int          iAssignmentType; // AJT v16.0.9
        int          iStudyPoint;     // AJT v16.0.3
        int          iNextStudyPoint; // AJT v16.0.9
    } S_DEMO_ENTRY_ASSIGN;
    
    using PublisherAssignments = std::vector<S_DEMO_ENTRY_ASSIGN>;
    
    typedef struct tagDemoEntryEx
    {
        CString     strName;
        E_GENDER    eGender;
        E_POSITION  ePosition;
        E_APPOINTED eAppointed;
        BOOL        bDemonstrations; // AJT v16.0.3
    
        PublisherAssignments  vectorItemAssign;       // Sorted array of S_DEMO_ENTRY_ASSIGN structures.
        PublisherAssignments  vectorItemAssignFuture; // Sorted array of S_DEMO_ENTRY_ASSIGN structures (future on active schedule).
    } S_DEMO_ENTRY_EX;
    
    using PublisherMap = std::map<CString, S_DEMO_ENTRY_EX>;
    using PublisherMapIter = std::map<CString, S_DEMO_ENTRY_EX>::iterator;
    

    我有这张地图:

    PublisherMap m_mapPublishers;
    

    我正在反向迭代发布者的工作分配:

    for (auto & m_mapPublisher : m_mapPublishers)
    {
        for (auto iterAssign = m_mapPublisher.second.vectorItemAssign.rbegin();
            iterAssign != m_mapPublisher.second.vectorItemAssign.rend(); iterAssign++)
        {
            S_DEMO_ENTRY_ASSIGN sDemoEntryAssign = *iterAssign;
            bool bValidAssignment = GetMostRecentDateForAssignment(m_eAssignmentContext, sDemoEntryAssign);
            // ...
        }
    }
    

    以前我只是用 iterAssign-> 访问结构值,但我决定移动内部代码 for 循环到方法中。我唯一能想到的方法就是通过这个结构 iterAssign 方法是先复制它。

    还有其他方法可以将vectore迭代器条目传递到函数中吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   r3mus n0x    7 年前

    是的,可以通过引用传递该值:

    S_DEMO_ENTRY_ASSIGN &sDemoEntryAssign = *iterAssign;
    

    或者简单地说:

    bool bValidAssignment = GetMostRecentDateForAssignment(m_eAssignmentContext, *iterAssign);
    

    只要确保你的 GetMostRecentDateForAssignment 方法通过引用排除其参数:

    GetMostRecentDateForAssignment(..., const S_DEMO_ENTRY_ASSIGN &sDemoEntryAssign)
    

    注释 :我做了一个 const 引用,因为似乎此方法不打算更改 sDemoEntryAssign .