插入迭代器

插入迭代器(按位置插入)

//插入迭代器
template<typename Container>
class My_insert_iterator
{
public:
	typedef My_insert_iterator<Container> _Myt;
	My_insert_iterator(Container& con,typename Container::iterator it)
	{
		pcon = &con;//容器指针指向容器对象
		mit = it;
	}
	_Myt& operator*()//返回后插型迭代器的对象
		//*为单目运算符,返回类型为My_back_insert_iterator<Container>
	{
		return *this;
	}
	_Myt& operator=(const typename Container::value_type& val)//形参为值类型
	{
		pcon->insert(mit,val);
		return *this;
	}
private:
	Container* pcon;//指向容器对象  容器类型的指针
	//Container::iterator mit;//err
	//Container是模板不编译,不知道iterator到底是类型还是静态的成员变量
	typename Container::iterator mit;//ok

};

//迭代器:面向对象的指针
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); 
	
	//insert_iterator<vector<int>> ii(vec, vec.begin());
	My_insert_iterator<vector<int>> ii(vec, vec.begin());
	*ii = 40;
	Show(vec);
	return 0;
}

插入泛型算法 inserter函数的实现

template<typename Container>
insert_iterator<Container> My_inserter(Container& con,typename Container::iterator mit)
{
	return insert_iterator<Container>(con,mit);
}

int main()
{
	int arr[] = { 363, 3, 13, 13, 1, 31, 3 };
	int len = sizeof(arr) / sizeof(arr + len);
	vector<int> vec(arr, arr + len); 
	
	//inserter(vec, vec.begin() + 2) = 40;
	My_inserter(vec, vec.begin() + 2) = 40;
	Show(vec);
	return 0;
}

猜你喜欢

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