STL之insert_iterator
2013-01-08 21:04
141 查看
insert_iterator功能:指定要插入容器的位置,然后向插入点后插入元素。如ListA{1,2,3,4,5,6,7,8,9} 。插入点位置在5处。要插入的链表为ListB{555,666,777}
,则结果为{1,2,3,4,5,555,666,777,6,7,8,9}。
见以下例子
结果
,则结果为{1,2,3,4,5,555,666,777,6,7,8,9}。
见以下例子
//advance(i, n) 指定迭代器i前进n步 相当于i=i+n //http://www.cplusplus.com/reference/iterator/advance/ #include <iostream> #include <iterator> #include <list> using namespace std; void TestAdvance() { list<int> mylist; for (int i=0; i<10; i++) mylist.push_back (i*10); list<int>::iterator it = mylist.begin(); advance (it,5); cout << "The sixth element in mylist is: " << *it << endl; } //http://www.cplusplus.com/reference/iterator/inserter/ //输出A链表到B链表中 输出的位置由B链表迭代器的位置指定 //this function generates an insert iterator for a container. //template<class InputIterator, class OutputIterator> // OutputIterator copy ( InputIterator first, InputIterator last, OutputIterator result ) //{ // while (first!=last) *result++ = *first++; // return result; //} void TestCopyOutputIterator() { list<int> firstlist, secondlist; for (int i=1; i<=5; i++) { firstlist.push_back(i); secondlist.push_back(i*10); } list<int>::iterator it; it = firstlist.begin(); advance (it,3); copy (secondlist.begin(),secondlist.end(),inserter(firstlist,it)); for ( it = firstlist.begin(); it!= firstlist.end(); ++it ) cout << *it << " "; cout << endl; } /* template <class Container> class insert_iterator : public iterator<output_iterator_tag,void,void,void,void> { protected: Container* container; typename Container::iterator iter; public: typedef Container container_type; explicit insert_iterator (Container& x, typename Container::iterator i) : container(&x), iter(i) {} insert_iterator<Container>& operator= (typename Container::const_reference value) { iter=container->insert(iter,value); ++iter; return *this; } insert_iterator<Container>& operator* () { return *this; } insert_iterator<Container>& operator++ () { return *this; } insert_iterator<Container> operator++ (int) { return *this; } }; */ //还可以直接使用insert_iterator迭代器 void TestCopy() { list<int> firstlist, secondlist; for (int i=1; i<=5; i++) { firstlist.push_back(i); secondlist.push_back(i*10); } list<int>::iterator it; it = firstlist.begin(); advance (it,3); insert_iterator< list<int> > insert_it (firstlist,it); copy (secondlist.begin(),secondlist.end(),insert_it); for ( it = firstlist.begin(); it!= firstlist.end(); ++it ) cout << *it << " "; cout << endl; } int main () { TestAdvance(); TestCopyOutputIterator(); TestCopy(); return 0; }
结果
The sixth element in mylist is: 50 1 2 3 10 20 30 40 50 4 5 1 2 3 10 20 30 40 50 4 5
相关文章推荐
- 从零开始学C++之STL(十):迭代器适配器{(插入迭代器back_insert_iterator)、IO流迭代器(istream_iterator、ostream_iterator)}
- C++之STL(十):迭代器适配器{(插入迭代器back_insert_iterator)、IO流迭代器(istream_iterator、ostream_iterator)}
- C++ STL(23):Insert Iterator(插值迭代器)
- 【STL】back_inserter与back_insert_iterator
- stl::map( constructor,insert,iterator) 1
- 从零开始学C++之STL(十):迭代器适配器{(插入迭代器back_insert_iterator)、IO流迭代器(istream_iterator、ostream_iterator)}
- 【STL】插入型迭代器(Insert Iterator)或插入器(inserter)
- 【STL】插入型迭代器(Insert Iterator)或插入器(inserter)
- STL中back_inserter(Cont&x)与back_insert_iterator(Cont&x)
- STL(十):迭代器适配器{(插入迭代器back_insert_iterator)、IO流迭代器(istream_iterator、ostream_iterator)}
- STL中,back_insert_iterator与back_inserter的区别。
- 【STL】back_inserter与back_insert_iterator
- 【STL】插入型迭代器(Insert Iterator)或插入器(inserter) (我就想自己看看)
- multimap insert ( iterator position, const value_type& x )
- back_insert_iterator
- 从零开始学C++之STL(三):迭代器类vector::iterator 和 vector::reverse_iterator 的实现、迭代器类型、常用的容器成员
- stl randomacess iterator 笔记
- STL_Iterator
- STL iterator的自己实现
- SGI STL Insert方法追加分析