c++泛型算法扩展和迭代器、反向迭代器

本文深入探讨C++中的迭代器概念,包括插入迭代器(back_inserter、front_inserter、inserter)、反向迭代器(rbegin、rend)的使用方法。同时,解析了泛型算法架构,涉及不同类型的迭代器及其应用,如输入、输出、前向、双向和随机访问迭代器。此外,还介绍了特定容器算法,如list和forward_list的merge、remove、reverse和splice操作。

cout << "=====================插入迭代器================" << endl;

back_inserter:创建一个使用push_back的迭代器

front_inserter:创建一个使用push_front的迭代器

inserter:创建一个使用insert的迭代器,第二个参数必须是指向给定容器的迭代器

vector<int> vec{ 1,2,3,4,5,6,7,8 };

vector<int> vec2;

copy(vec.begin(), vec.end(), back_inserter(vec2));

for_each(vec2.begin(), vec2.end(), [](const int& num) {cout << num << " "; });

cout << endl;

 

list<int> lis;

copy(vec.begin(), vec.end(), front_inserter(lis));

for_each(lis.begin(), lis.end(), [](const int& num) {cout << num << " "; });

cout << endl;

 

list<int> lis2;

copy(vec.begin(), vec.end(), inserter(lis2,lis2.begin()));

for_each(lis2.begin(), lis2.end(), [](const int& num) {cout << num << " "; });

cout << endl;

 

 

cout << "=====================反向迭代器================" << endl;

反向迭代器:rbegin()、rend()从容器尾部开始计算,也是使用++

auto nump = find(vec2.rbegin(), vec2.rend(), 8);

cout << *nump << endl;

 

cout << "=====================命名规范================" << endl;

_if:一般为判断是否为真,而且一般都有和它类似的算法,例如find_if和find

_copy:一般会拷贝元素

 

 

cout << "=====================泛型算法架构================" << endl;

使用了5类迭代器

输入迭代器:可以读取序列中的元素(可以理解为从内存往代码输入)

输出迭代器:只写不读

前向迭代器:可以读写

双向迭代器:可以正反方向读写序列中的元素

随机访问迭代器:提供在常量时间内访问序列中任意元素的能力。

 

算法参数模式

args(beg, end, other args);

args(beg, end, dest, other args);

args(beg, end, beg2, other args);

args(beg, end, beg2, end2, other args);

 

cout << "=====================特定容器算法================" << endl;

对于list和forward_list来说

lst.merge(lst2):将lst2的元素合并入lst。lst和lst2都必须是有序的。

lst.merge(lst2,comp):元素将从lst2中删除。在合并之后lst2变为空。

lst.remove(val)、lst.remove_if(pred):调用erase删除掉与给定值相等或令一元谓词为真的每个元素。

lst.reverse():反转lst中的元素顺序

lst.splice(p,lst2):将lst2中的元素移动到lst的p之前的位置。

splice参数还可以是(p,lst2,p2)、(p,lst2,b,e),p2为将指定的元素移动到lst中,或p2后边的元素移动到flst中。b,e为lst2的合法范围

 

lis2.reverse();//翻转lis2

for_each(lis2.begin(), lis2.end(), [](const int& num) {cout << num << " "; });

cout << endl;

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值