C# · 12月 19, 2021

c/c++ 插入迭代器实例讲解

标准库 插入迭代器 详解

插入迭代器作用:copy等函数不能改变容器的大小,所以有时copy先容器是个空的容器,如果不使用插入迭代器,是无法使用copy等函数的。

例如下面的代码就是错误的:

list lst{1,2,3,4};

list lst2,lst3;

copy(lst.cbegin(),lst.cend(),lst2.begin());

lst2是个空的容器,copy函数不能扩容容器lst2,所以会发生运行时错误。

用插入迭代器就可以很好的解决上面的问题

list lst{1,inserter(lst3,lst3.begin()));

三种插入迭代器

迭代器

功能描述

back_inserter

创建一个使用push_back的迭代器

front_inserter

创建一个使用push_front的迭代器

inserter

创建一个使用insert的迭代器,元素插入到指定位置之前

inserter的特殊之处:

//假设it是有inserter生成的迭代器

*it = val;//其效果同下面二行代码一样

it = c.insert(it,val);//it指向新加入的元素

++it;//递增it,使它指向原来的元素

例子:

#include

#include

#include

#include

using namespace std;

int main(){

//copy函数不会改变容器的大小,但是使用了插入迭代器后,

//就会改变容器的大小了

/*

list lst{1,lst3;

//运行错误,因为lst2是空list,copy函数不会增加容器的大小

//copy(lst.cbegin(),lst2.begin());

//结果:4,3,2,1

copy(lst.cbegin(),front_inserter(lst2));

//结果:1,2,3,4

copy(lst.cbegin(),lst3.begin()));

for(auto const &s : lst2){

cout << s << " ";

}

cout << endl;

for(auto const &s : lst3){

cout << s << " ";

}

cout << endl;

*/

//unique_copy 拷贝不重复的元素到新的容器

vector ivec{1,1,4,1};

list lst;

sort(ivec.begin(),ivec.end());

unique_copy(ivec.cbegin(),ivec.cend(),back_inserter(lst));

for(auto const &s : lst){

cout << s << " ";

}

cout << endl;

}

c/c++ 学习互助QQ群:877684253

本人微信:xiaoshitou5854