boost类库实现普通C++类的迭代
C++中很多类包含map或者vector容器,用来彰显一种一对多的关系,这种一对多关系的存在很自然的要求我们实现对其中所有数据的遍历,这种需求可以通过如下的示例代码实现
#include <iostream>
#include <map>
#include <boost/iterator/transform_iterator.hpp>
using namespace std;
using namespace boost;
class A {
typedef map<int, int> map_data;
typedef int(*getter)(map_data::value_type const&);
static inline int get(map_data::value_type const& p) {
return p.second;
}
public:
typedef boost::transform_iterator<getter, map_data::const_iterator> const_iterator;
const_iterator begin() const { return boost::make_transform_iterator(data.begin(), &get); }
const_iterator end() const { return boost::make_transform_iterator(data.end(), &get); }
void add(int a, int b) {
data[a] = b;
}
private:
map_data data;
};
int main() {
A a;
a.add(1, 2);
a.add(2, 2);
a.add(3, 2);
a.add(4, 2);
a.add(5, 2);
for (auto temp : a) {
cout << temp << endl;
}
return 0;
}