2016-11-18 51 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

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

注意,仍然是所有元素中list存在 - 他們並沒有真正刪除(這是一個古怪的命名算法 - 把它當作copy_unless())。所以現在你會有一堆未指定狀態的元素。

相關問題