【c++】 STL 插入迭代器 back_inserter() front_inserter() inserter() 及 拷贝算法 copy()

首先注意使用插入迭代器时头文件为

include <iterator>

泛型算法有很多,大多数都定义在:( 例如copy() )

#include<algorithm>
#include<numeric>
本文的思路为通过拷贝算法copy(),引出插入迭代器的使用,如无需了解此算法,请看本文后半部分

拷贝算法:接受三个迭代器参数,前两个表示输入的范围,第三个表示目的序列起始位位置。此算法将输入范围的元素拷贝到目的序列,传入给copy的目的序列至少要包含与输入序列一样多的元素。

copy()

list<int> A{0,1,2,3};
 list<int>B(4);
 copy(A.begin(), A.end(),B.begin());
 
 for (auto &b : B)
 {
  cout << b << endl;
 }//输出0,1,2,3

上面的代码中指定B的大小与A相同,若为空向量则会出严重错误

list<int> A{0,1,2,3};
 list<int>B;//空向量
copy(A.begin(), A.end(),B.begin());//灾难:B中没有4的空间
 for (auto &b : B)
 {
  cout << b << endl;
 }

若我们想向一个空的容器进行泛型操作呢?
先看一段代码:

list<int> A{0,1,2,3};
 list<int>B;
 copy(A.begin(), A.end(),back_inserter(B));//相当于对B进行push_back操作
 for (auto &b : B)
 {
  cout << b << endl;
 }//输出0,1,2,3

引入:插入迭代器

插入迭代器:一种迭代器适配器,接收一个容器,向其中插入元素并返回一个迭代器

有三种类型,区别在于插入元素的位置:

插入迭代器内容
back_inserter()创建一个使用push_back的迭代器
front_inserter()创建一个使用push_frount的迭代器
inserter()创建一个使用insert的迭代器,此函数的第一个参数为容器第二个参数为一个指向给定容器的迭代器。元素将被插入到该迭代器之前。

front_inserter()

list<int> A{0,1,2,3};//list支持push_front,因此可以用front_inserter() vecter就会报错
list<int>B;
 copy(A.begin(), A.end(),front_inserter(B));

 for (auto &b : B)
 {
  cout << b << endl;
 }//输出的结果为 3,2,1,0

inserter()

list<int> A{0123}; 
list<int>B; 
copy(A.begin(), A.end(),inserter(B,B.begin())); 
for (auto &b : B) 
{   
cout << b << endl;
 }//输出的结果为 0,1,2,3

back_inserter()

list<int> A{0,1,2,3};
 list<int>B;  
 copy(A.begin(), A.end(),front_inserter(B));   
  for (auto &b : B)  
  {   
  cout << b << endl; 
   }//输出的结果为 0,1,2,3
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值