iterator adapter inserter
来源:互联网 发布:pe windows启动修复 编辑:程序博客网 时间:2024/05/22 04:43
1.insert_iterator
这个adapter将iterator的赋值(assign)操作变为安插(insert操作),并将iterator右移一个位置。如此便可让user连续执行[表面上assign而实际上insert]的行为。
template <class _Container>class insert_iterator {
protected:
_Container* container; //底层容器
typename _Container::iterator iter;
public:
typedef _Container container_type;
typedef output_iterator_tag iterator_category;//注意类型
typedef void value_type;
typedef void difference_type;
typedef void pointer;
typedef void reference;
insert_iterator(_Container& __x, typename _Container::iterator__i)
: container(&__x),iter(__i) {}
insert_iterator<_Container>&
operator=(const typename _Container::value_type& __value) {
iter = container->insert(iter, __value); //关键:转调用insert()
++iter; //令insert_iterator永远跟随其target贴身移动
return *this;
}
insert_iterator<_Container>& operator*() { return *this; }
insert_iterator<_Container>& operator++() { return *this; }
insert_iterator<_Container>& operator++(int) { return *this; }
};
2.inserter
辅助函式,帮助user使用inserter_iterator
template <class _Container, class _Iterator>
inline
insert_iterator<_Container> inserter(_Container&__x, _Iterator__i)
{
typedef typename _Container::iterator __iter;
return insert_iterator<_Container>(__x, __iter(__i));
}
3.copy
template<class InputIterator,
class OutputIterator>
OutputIterator
copy(InputIterator first,InputIterator last,OutputIterator result)
{
while(first != last) {
*result = *first;
++result ; ++first;
}
return result;
}
4.示例
http://www.cplusplus.com/reference/iterator/inserter/
// inserter example#include <iostream> // std::cout#include <iterator> // std::front_inserter#include <list> // std::list#include <algorithm> // std::copyint main () { std::list<int> foo,bar; for (int i=1; i<=5; i++) { foo.push_back(i); bar.push_back(i*10); } std::list<int>::iterator it = foo.begin(); advance (it,3); std::cout << "foo contains:"; for ( std::list<int>::iterator it = foo.begin(); it!= foo.end(); ++it ) std::cout << ' ' << *it; std::cout << '\n'; std::cout << "bar contains:"; for ( std::list<int>::iterator it = bar.begin(); it!= bar.end(); ++it ) std::cout << ' ' << *it; std::cout << '\n'; std::copy (bar.begin(),bar.end(),std::inserter(foo,it)); std::cout << "foo contains:"; for ( std::list<int>::iterator it = foo.begin(); it!= foo.end(); ++it ) std::cout << ' ' << *it; std::cout << '\n'; return 0;}
执行结果:
- iterator adapter inserter
- Iterator adapter
- 【STL】插入型迭代器(Insert Iterator)或插入器(inserter)
- 【STL】插入型迭代器(Insert Iterator)或插入器(inserter)
- STL中的iterator adapter
- iterator-adapter 练习例子
- iterator adapter reverse_iterator
- 【STL】插入型迭代器(Insert Iterator)或插入器(inserter) (我就想自己看看)
- C++-inserter
- C++ inserter
- 打造自己的Iterator Adapter – File Iterator
- inserter、back_inserter、front_inserter
- C++之 inserter
- inserter、back_inserter、front_inserter
- inserter的用法
- 源码之前,了无秘密(一)——iterator adapter
- std::map 的 inserter 实现
- 浅谈算法back_inserter,front_inserter,inserter
- 闭关修炼之struts2框架1
- iOS appledoc自动生成API文档
- memcached缓存与mybatis的整合
- 【bzoj1036】[ZJOI2008]树的统计Count
- (8)高通AP10.4开发者指南——WLAN(2.2 上下文及同步处理)
- iterator adapter inserter
- 11.JavaScript深入之bind的模拟实现
- Spring Boot注解
- 增加 VM虚拟机硬盘容量
- 【Robotframework】WebDriverException: Message: Expected [object Undefined] undefined to be a string
- jQuery EasyUI parser 的使用场景
- OpenGL中gl,glu,glut的区别
- 学术论文写作
- MySQL中利用外键实现级联删除、更新