Scoped / Reference Counted Iterator

时间:2011-07-29 18:41:00

标签: c++

我正在寻找一种模拟“范围迭代器”的方法(缺少更好的短语)。基本上,我想从集合中获取一个迭代器(在本例中为map)并将其包装在一个“scoped iterator”中,一旦删除最后一个引用,它将从集合中删除元素/迭代器。我目前的做法如下,但我正在寻找更优雅的东西。

typedef std::map<int,bool> map_type;
typedef map_type::iterator iter_type;

void iterDelete( std::shared_ptr<map_type> map,  iter_type * iter)
{
    map->erase(*iter);
    delete(iter);
}    

int main()
{ 
    std::shared_ptr<map_type> myMap( new map_type() ); //std::map because iterators are not invalidated by erase/insert
    iter_type myIter = myMap->find(7);
    std::shared_ptr<iter_type> scopedIter( new iter_type(myIter), std::bind(iterDelete, myMap, std::placeholders::_1) ); //Deleters keep map in scope until all "scoped iterators" die.
}

1 个答案:

答案 0 :(得分:1)

最简单的方法是使用shared_ptr的自定义删除器,它将从地图中删除该元素。另外,void main()是Bad。