我正在使用transform_iterator
来访问map
的密钥(和单独的值)。
但它似乎没有保留std::map::iterator
...
#include <map>
#include <iterator>
#include <assert.h>
#include <boost/iterator/transform_iterator.hpp>
typedef std::map<int,int> map;
template <typename Pt>
struct XFunc
{
typedef typename Pt::first_type result_type;
result_type& operator()(const Pt &p) { return p.first; }
};
typedef XFunc<map::value_type> xfunc;
typedef boost::transform_iterator<xfunc,map::iterator> XIt;
int main(int argc, char* argv[])
{
map data;
for (int i = 0; i < 10; ++i )
{
map::value_type pt( i, i * 2 );
data.insert( pt );
}
map::iterator itend = data.end();
map::iterator itlast = itend;
std::advance(itlast,-1);
assert(itend != itlast); // succeeds !
XIt xend = boost::make_transform_iterator(itend,xfunc());
XIt xlast = xend;
std::advance(xlast,-1);
assert(xend != xlast); // fails !
return 0;
}
我做错了什么?