我知道这些问题之前有各种各样的问题,但这有点不同 .
我有一个包含std :: map的类 . 虽然我希望在类中使用映射用于其他目的,但在外部我想要将迭代器适配器暴露给映射内的值(即std :: pair中的第二项) .
例如在python中我可能会这样做:
def __iter__(self): return self._dict.itervalues()
我如何在c中执行此操作,将实现隐藏在类中?
谢谢,
担
看看Boost的transform_iterator,它提供了这种功能:
template <typename K, typename V> struct get_value { const V& operator ()(std::pair<K, V> const& p) { return p.second; } }; class your_class { typedef map<int, float> TMap; TMap mymap; public: typedef get_value<TMap::key_type, TMap::data_type> F; typedef boost::transform_iterator<F, TMap::iterator> value_iterator; value_iterator begin() { return make_transform_iterator(mymap.begin(), F()); } value_iterator end() { return make_transform_iterator(mymap.end(), F()); } // TODO Same for const versions. // Rest of the interface … };
现在,您可以迭代值,例如像这样:
your_class c; // Fill c with some values … copy(c.begin(), c.end(), ostream_iterator<float>(cout, " "));
1 回答
看看Boost的transform_iterator,它提供了这种功能:
现在,您可以迭代值,例如像这样: