通过迭代器插入元素
#include<iostream>
#include<vector>
#include<list>
#include<iterator>
#include<algorithm>
#include<functional>
using namespace std;
//插入型迭代器
template<typename Container> //迭代器都是类,为了实现泛型,都写成类模板
//模板:把类型参数化
class My_front_insert_iterator//前插型
{
public:
typedef My_front_insert_iterator<Container> _Myt;
My_front_insert_iterator(Container& con)
{
pcon = &con;//容器指针指向容器对象
}
_Myt& operator*()//返回后插型迭代器的对象
//*为单目运算符,返回类型为My_back_insert_iterator<Container>
{
return *this;
}
_Myt& operator=(const typename Container::value_type& val)//形参为值类型
{
pcon->push_front(val);
return *this;
}
private:
Container* pcon;//指向容器对象
};
//迭代器:面向对象的指针
template<typename Container>//模板类型参数
void Show(const Container& con)
{
//Container::iterator it = con.begin;//err
Container::const_iterator it = con.begin();
for (it; it != con.end(); ++it)
{
cout << *it << " ";
}
cout << endl;
}
//插入型迭代器
int main()
{
int arr[] = { 363, 3, 13, 13, 1, 31, 3 };
int len = sizeof(arr) / sizeof(arr + len);
vector<int> vec(arr, arr + len);
list<int> list1(vec.begin(), vec.end());
//front_insert_iterator<vector<int>> fii(vec);//err
//My_front_insert_iterator<vector<int>> fii(vec);//err
My_front_insert_iterator<list<int>> fii(list1);//err
fii = 30;
Show(list1);
return 0;
}
前插型泛型算法 front_inserter函数的实现
template<typename Container>
front_insert_iterator<Container> My_front_inserter(Container& con)
{
return front_insert_iterator<Container>(con);
}
int main()
{
int arr[] = { 363, 3, 13, 13, 1, 31, 3 };
int len = sizeof(arr) / sizeof(arr + len);
vector<int> vec(arr, arr + len);
list<int> list1(vec.begin(), vec.end());
//front_inserter(list1) = 30;
My_front_inserter(list1) = 30;
Show(list1);
return 0;
}