c++ - 将 STL::vector 迭代器入口传递给函数

标签 c++ vector

我有这些定义:

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;

我有这张 map :

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 传递到方法中的唯一方法是先复制它。

还有其他方法可以将 vector 迭代器入口传递给函数吗?

最佳答案

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

S_DEMO_ENTRY_ASSIGN &sDemoEntryAssign = *iterAssign;

或者简单地说:

bool bValidAssignment = GetMostRecentDateForAssignment(m_eAssignmentContext, *iterAssign);

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

GetMostRecentDateForAssignment(..., const S_DEMO_ENTRY_ASSIGN &sDemoEntryAssign)

注意:我将其设为const 引用,因为该方法似乎并不是要更改sDemoEntryAssign 的值。

关于c++ - 将 STL::vector 迭代器入口传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51321605/

相关文章:

c++ - 如何在保持最小距离的情况下沿有限线随机采样?

c++ - No matching error operator error in string input?

c++ - 使用 stringstream 对字符串进行标记,其中最后一个字符是分隔符

c++ - 从 boost::python 中的 kwargs 中提取参数

c++ - std::sort 如何处理对列表?

c++ - vector 中的数据什么时候释放?

c++ - 如何获得一个 vector 以接收具有相同基类的 2 个不同类?

scala - 将 Scala 迭代器转换为向量

c++ - 模板 - 这可以做到吗?

c++ - WinAPI 中没有客户区的窗口