イテレータは削除操作時に無効化されるため、すべての要素に対して最小限のコードで反復処理を行い、その一部を削除するにはどうすればよいですか?いくつかの要素をstd :: setから別のコンテナにきれいに移動する方法は?
1
A
答えて
5
// Filters the elements of a set: elements that satisfy the predicate 'pred'
// are removed from the source set and inserted into the output.
template <typename TSet, typename TOutputIterator, typename TPredicate>
void extract_if(TSet& s, TOutputIterator out, TPredicate pred)
{
for (typename TSet::iterator it(s.begin()); it != s.end();)
{
if (pred(*it))
{
*out++ = *it;
it = s.erase(it);
}
else
{
++it;
}
}
}
+0
うわー、気付かれなかった 'erase'はイテレータを返します:) –
+1
私はそれを試してみたのですが、あなたのループは' if'文の 'else'節で' it'をインクリメントするべきではありません。 for文よりも? – Hurkyl
+0
@Hurkyl:確かにそれはすべきです。おっとっと。ありがとうございました! –
関連する問題
- 1. 1つのリストから別のリストにli要素を移動する方法
- 2. `std :: set`の要素に基づいて` std :: vector`をスライスする方法
- 3. STLコンテナから要素を移動すると、そのコンテナから要素が削除されますか?
- 4. 要素をリストボックスから別の要素に移動
- 5. std :: vectorとstd :: setプロパティを持つコンテナ?
- 6. ScalaのインスタンスをSetから別のものに移動
- 7. いくつかのJQuery要素を一緒に作る方法
- 8. std :: set要素のアドレスを取っているときに 'const int *'から 'int *'への無効な変換
- 9. フレックスプロジェクトで円を1つのコンテナから別のコンテナにドラッグする方法
- 10. Enumerable.Except()によって返される動的オブジェクトのいくつかの要素を取得する方法は?
- 11. animation:ある位置から別の位置に要素を移動する
- 12. androidの1つのポイントから別のポイントにビットマップを移動する方法
- 13. boost :: variant要素でいっぱいのstd :: setを子孫でソートすることはできませんか?
- 14. 1つのタスクから別のタスクにコンテキストを移動/コピーする方法
- 15. いくつかの要素
- 16. UIオートメーション要素を別の場所に移動するにはどうすればよいですか?
- 17. いくつかの最後のコミットを別のリポジトリに移動しますか?
- 18. 挿入時のコンテナstd :: setの動作は?
- 19. 'a'と 'z'の間にいくつかの文字を移動する方法
- 20. 要素にjQueryの別の要素が含まれているかどうかを確認する方法
- 21. javascriptイベントをある要素から別の要素に渡すにはどうすればよいですか?
- 22. 別のビューコントローラ(iphone)にビューから移動する方法
- 23. 移動するベクトルの要素は何に含まれていますか?
- 24. 共有要素の移行がいつ終了するかを知る方法
- 25. コンテナから要素を削除したときにコンテナdivの新しい高さにアニメーション化する
- 26. DataTablesからいくつかの要素を削除するにはどうすればよいですか?
- 27. undoMoveからの移動を区別する方法は?
- 28. 円の周りにいくつかの要素を動的に配置する
- 29. 1つのアクティビティから別のアクティビティに移動するにはどうすればよいですか?
- 30. 別のページから別のページに移動するには
std :: remove_copy_if? –