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?
セットの要素を移動するきれいな方法はありますか?次のようなものがあります。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?
C++ 11では、あなたがやっている動きは未定義の振る舞いです。 C++ 17では
、はい、extract()
で:あなたが発注を破るよう
for (auto it = s.begin(); it != s.end();) {
v.push_back(std::move(s.extract(it++).value()));
}
s.clear();
私は集合の要素を変更伐採何も持ってはUBです。 – NathanOliver
http://en.cppreference.com/w/cpp/iterator/move_iterator – Caleth
std :: set :: eraseがT &&を返さない –
Bwmat