将stl::vector iteratator条目传递到函数中

Passing stl::vector iteratator entry into function

本文关键字:函数 stl vector iteratator      更新时间:2023-10-16

我有以下定义:

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迭代器条目传递到函数中?

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

S_DEMO_ENTRY_ASSIGN &sDemoEntryAssign = *iterAssign;

或者简单地说:

bool bValidAssignment = GetMostRecentDateForAssignment(m_eAssignmentContext, *iterAssign);

只需确保您的GetMostRecentDateForAssignment方法通过引用超出其参数即可:

GetMostRecentDateForAssignment(..., const S_DEMO_ENTRY_ASSIGN &sDemoEntryAssign)

注意:我将其作为const引用,因为此方法似乎并不打算更改sDemoEntryAssign的值。