【问题标题】:C++: iterate over a list, calling a method that deletes its list memberC ++:迭代列表,调用删除其列表成员的方法
【发布时间】:2020-12-01 12:33:12
【问题描述】:

假设订阅可以表示为string,也许是一个感兴趣的主题。

我的班级有 Subscribe()Unsubscribe() 方法获取这些字符串,并维护我们当前订阅的字符串的 unordered_set

为方便起见,析构函数将从您当前订阅的每个主题中Desubscribe()(我们可以说,这对于这个系统来说是必需的)。

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

请注意,在类似的问题中,删除是可选的,并且可能由相关方法完成。这个问题不同,因为删除是通过不同的方法完成的。

那么最清晰的编码方式是什么?

unordered_set<string> setsSubscribed;

MyClass::~MyClass() {
    while ( auto it: setsSubscribed )
        Unsubscribe( *it );
}

【问题讨论】:

  • 请在C++问题中添加c++标签,以便更多用户看到。

标签: c++ c++11 set unordered-set


【解决方案1】:

这似乎有效。让我知道这是否有任何问题,或者更清晰的编写方式。我不是 C++ 专家,但我不记得以前见过这个成语。

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

【讨论】:

    猜你喜欢
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 2011-09-23
    • 2018-09-26
    • 2014-01-30
    • 2019-02-12
    • 2018-07-18
    相关资源
    最近更新 更多