我有这些定义:
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/