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

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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值