插入型迭代器(前插型)

通过迭代器插入元素 

#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;
}

猜你喜欢

转载自blog.csdn.net/Aspiration_1314/article/details/88376519