我有以下行中定义的 std::vector 实例:
std::vector< std::pair<EndPointAddr*, EndPointAddr*>* > mServiceSubscriptionsList;
底层 std::pair 对象中的第一项是订阅实体的网络地址,而第二项是订阅实体的网络地址。因此,std::pair 对象在此处将订阅表示为订阅者和订阅的端点地址对。
我想删除此向量中给定订阅者端点地址的所有订阅。为此,我编写了下面指示的函数,其中我将 std::remove_if 与谓词一起使用。根据 std::remove_if 的文档,我的理解是 std::remove_if 将所有要删除的事件放在向量的末尾,并将向量的末尾向后移动到新位置。
我的问题是:
如何在调用 remove_if 之后访问这些放入向量末尾的 std::pair 项目,以便一个接一个地动态释放它们的内容(即释放 std::pair* 指针)?您能否在下面的功能代码中指出所需的代码片段?我可以删除最后保存在迭代器中的第一个出现。但是,我不确定如何删除其余的事件。谢谢。
bool
XXX::removeSubscriptionForASpecificSubscriber(EndPointAddr * ptrSubscriberAddr)
{
auto last =
std::remove_if(mServiceSubscriptionsList.begin(),
mServiceSubscriptionsList.end(),
[ptrSubscriberAddr](std::pair<EndPointAddr*, EndPointAddr*>* thePair)
{
return ptrSubscriberAddr->getXXXAddress().compareTo(thePair->first->getXXXAddress());
});
if(last != mServiceSubscriptionsList.end())
{
//HERE I CAN DELET THE FIRST OCCURENCE, but WHAT I WANT IS TO DELETE ALL OCCURANCES
if(*last != nullptr)
{
delete *last;
}
mServiceSubscriptionsList.erase(last, mServiceSubscriptionsList.end());
return true;
}
return false;
}