c++11,抢救一个集合

c++11, salvaging a set

有没有一种干净的方法可以将集合中的元素移出它?类似于:

set<A> s {...};
vector<A> v;
for (const A& a : s)
    v.push_back(move(const_cast<A&>(a)));
s.clear(); //undefined behavior?

在 C++11 中,没有。您正在执行的操作是未定义的行为。

在 C++17 中,是的,使用 extract():

for (auto it = s.begin(); it != s.end(); ) {
    v.push_back(std::move(s.extract(it++).value()));
}
s.clear();