加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 04:54:30 所属栏目:百科 来源:网络整理
导读:标准库 插入迭代器 详解 插入迭代器作用:copy等函数不能改变容器的大小,所以有时copy先容器是个空的容器,如果不使用插入迭代器,是无法使用copy等函数的。 例如下面的代码就是错误的: list lst{1,2,3,4}; list lst2,lst3; copy(lst.cbegin(),lst.cend(),

标准库 插入迭代器 详解

插入迭代器作用: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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读