2016-11-18 25 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())。所以现在你会有一堆未指定状态的元素。