我有一个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* 指针)?您能否在下面的函数代码中指示所需的代码片段?我可以删除保留在迭代器 last 中的第一个出现。但是,我不确定如何删除其余出现。谢谢。
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;
}