如果谓词满足,如何(重新)从容器移动?

时间:2016-11-18 14:41:36

标签: c++ stl containers move-semantics stl-algorithm

如何使用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 个答案:

答案 0 :(得分: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())。所以现在你将有一堆处于未指定状态的元素。