C++:对列表进行迭代,调用一个删除其列表成员的方法



假设订阅可以表示为string,可能是感兴趣的主题。

我的类有Subscribe()Unsubscribe()方法,它们接受这些字符串,并维护我们当前订阅的字符串的unordered_set

为了方便起见,析构函数将从您当前订阅的每个主题中Desubscribe()(比如说,这对这个系统来说是必要的(。

但是,简单循环不起作用,因为Unsubscribe()正在删除集合项。

请注意,在类似的问题中,删除是可选的,可能是通过所讨论的方法完成的。这个问题不同,因为删除是通过不同的方法完成的

那么,对它进行编码以使其工作的最清晰的方法是什么呢?

unordered_set<string> setsSubscribed;
MyClass::~MyClass() {
while ( auto it: setsSubscribed )
Unsubscribe( *it );
}

这似乎有效。如果这个有什么问题,请告诉我,或者用更清晰的方式来写。我不是C++专家,但我不记得以前见过这个成语。

MyClass::~MyClass() {
while ( setsSubscribed.size() )
Unsubscribe( *setsSubscribed.begin() );
}

最新更新