我正在寻找一种模拟“范围迭代器”的方法(缺少更好的短语)。基本上,我想从集合中获取一个迭代器(在本例中为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.
}
答案 0 :(得分:1)
最简单的方法是使用shared_ptr的自定义删除器,它将从地图中删除该元素。另外,void main()是Bad。