STL—Iterator的分类和copy的重载及其使用

本文介绍了C++ STL中的迭代器,包括基本迭代器如iterator、reverse_iterator、const_iterator和const_reverse_iterator,以及插入型迭代子back_insert_iterator、front_insert_iterator和insert_iterator。此外,还讲解了适配器函数back_inserter、front_inserter和inserter的作用,以及流迭代器和Copy重载的概念。
摘要由CSDN通过智能技术生成

Iterator是什么

简单的来说,iterator是C++中容器的访问接口,在STL不需要关心容器内如何实现的,C++标准库中有五种预定义的迭代子,其中功能最为强大的是随机访问迭代子,在上次博文中提到了输入流迭代器和输出流迭代器,在标准库定义中五种迭代子越往下功能越强大,但是不会继承。
上次博文中对于泛式算法的分类并没有提到,这次简明提一下:
泛式算法通常是返回一个迭代子,使用迭代子间接操作容器元素,泛式算法分为以下几种:

  1. 变化序列算法
  2. 非变化序列算法
  3. 数字型算法
    在这里插入图片描述
    现在我们看一看迭代器分类及其作用

基本迭代器 //正序 逆序 普通 常量

系统提供的四种迭代器:

  1. iterator
  2. reverse_iterator//反向遍历变量数据
  3. const_iterator
  4. const_reverse//反向遍历常量数据
我们以遍历函数作为例子来介绍四种迭代器:
template<typename Container>//遍历数据
void Show(Container& con)
{
	Container::iterator it = con.begin();
	while (it != con.end())
	{
		std::cout << *it << " ";
		it++;
	}
	std::cout << std::endl;
}

我们知道,迭代器是容器的外部接口,在上面这个例子中,使用容器自带的begin()接口返回首元素的迭代器类型,从而遍历整个容器,可以看到我们使用了函数模板操作,这可以让本函数适用于所有顺序容器(关联容器因为内存不连续,所以无法++操作)

template <typename Container>//遍历常量数据,表示数据的值不能改变
void Show(const Container& con)
{
	Container::const_iteraior it = con.begin();
	while(it != con.end())
	{
		std::cout<<*it<<" "'
	}
	std::cout<<std::endl;
}
template <typename Continer>
void Show(const Continer& con)
{
	Continer::iterator it = con.begin();//此时运行到此行会报错,因为普通指针指向一个const修饰的容器对象
    这会有修改的风险,是不可以的。
}
template <typename Continer>
void Show(const Continer& con)
{
	const Continer::iterator it = con.begin();//此时运行到此行会报错,这里的const表示it的指向不能变,但是值可以变
    所以不能使用
    这会有修
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值