2016-11-18 5 views
0

STLアルゴリズムモジュールを使用して要素をaux_listに移動するにはどうすればよいですか?述語が満たされている場合、コンテナから(再)移動する方法は?

std::remove_copy_if(list.begin(), list.end(), std::back_inserter(aux_list), 
        [](const value_type& item_ptr) 
        { 
         return !item_ptr->is_valid(); 
        }); 
+1

'list'から' aux_list'にコピーするのではなく、要素を移動したいのですか? – NathanOliver

+0

名前の通り、remove_copy_ifは実際に何も削除しないことに注意してください。 –

+0

私は実際に前に同様の質問をしました。 https://stackoverflow.com/questions/27320577/remove-elements-from-range-and-copy-removed-elements-to-new-range –

答えて

1

使用move iterators:まだ要素すべてがlistに存在していること

std::remove_copy_if(
    std::make_move_iterator(list.begin()), 
    std::make_move_iterator(list.end()), 
    std::back_inserter(aux_list), 
    [](const value_type& item_ptr) { return !item_ptr->valid(); }); 

注 - 彼らは実際に(これは不気味という名前のアルゴリズムです - copy_unless()と考える)は削除されませんでした。だから、あなたは不特定の状態の要素の束を持っています。

関連する問題