【发布时间】:2015-07-31 05:13:07
【问题描述】:
我遇到了问题,我认为这是因为迭代器无效。但是我使用来自erase() 的迭代器来继续迭代其他结构。当erase() 在第一次调用erase() 后尝试递增时,我收到以下错误
'向量迭代器不可递增'
std::map<uint32_t, std::vector<std::pair<boost::uuids::uuid, tvshared::SecureIPCCallbackHandlePtr>>>::iterator itMap;
std::vector<std::pair<boost::uuids::uuid, tvshared::SecureIPCCallbackHandlePtr>>::iterator itVector;
{
tvstd::lock_guard_mutex l(m_ConnectionsMutex);
itMap = m_Connections.find(static_cast<uint32_t>(pcp->ProcessID()));
if (itMap != m_Connections.end())
{
for (itVector = itMap->second.begin(); itVector != itMap->second.end(); ++itVector)
{
if (commadUUID == itVector->first)
{
itVector->second.reset();
itVector = m_Connections[static_cast<uint32_t>(pcp->ProcessID())].erase(itVector);
}
}
}
}
谁能看出我哪里出错了?
【问题讨论】:
-
提示:如果您的
erase调用删除了向量中的最后一个元素会怎样? -
@T.C.啊,是的,这是因为我在列表的中间擦除,如果我最后这样做会很好......所以我在这里所做的就是在我擦除后暂停。这样就解决了。
-
另外,第二次查找完全没有必要。只需使用
itMap。