c ++ 11,打捞一套

时间:2016-09-26 16:19:07

标签: c++ set move-semantics

是否有一种干净的方式来移动它的元素?类似的东西:

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

1 个答案:

答案 0 :(得分:5)

在C ++ 11中,没有。你正在做的举动是未定义的行为。

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

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