2016-09-26 6 views
1

セットの要素を移動するきれいな方法はありますか?次のようなものがあります。C++ 11、セットをサルベージする

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

私は集合の要素を変更伐採何も持ってはUBです。 – NathanOliver

+1

http://en.cppreference.com/w/cpp/iterator/move_iterator – Caleth

+0

std :: set :: eraseがT &&を返さない – Bwmat

答えて

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();