10.4.3反向迭代器Reverse_iterator笔记

反向迭代器就是在容器中
从尾元素向首元素反向移动的迭代器。对于反向携带器,递增(以及递减)操作的含义会颠倒过来。递增一个反向迭代器(++it)会移动到前一个元素;递减一个迭代器(--it)会移动到下一个元素。

反向输出经过排序后的vector

ostream_iterator<int> out_iter(cout, " ");
vector<int> vec = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
sort(vec.rbegin(), vec.rend());
for (auto r_iter = vec.crbegin(); r_iter != vec.crend(); ++r_iter)
	*out_iter++ = *r_iter;
cout << endl;
将名为line的string,最后一个逗号之后的单词打印
string line{ "FIRST, MIDDLE,LAST" };
auto rcomma = find(line.crbegin(), line.crend(), ',');
cout << string(line.crbegin(), rcomma) << endl;//输出TSAL
cout << string(rcomma.base(), line.cend()) << endl;//输出LAST,调用了reverse_iterator 	中的base成员函数来完成这一转换

10.5.3算法命名规范
一些算法使用重载形式传递一个谓词

Unique(beg, end);  //使用==运算符比较元素
Unique(beg, end, comp);   //使用comp比较元素
_if版本算法

接受一个元素之的算法通常有另一个不同名的(不是重载版本的)版本,该版本接受一个谓词代替元素值,接受谓词参数的算法都有附加的_if前缀:

find(beg, end, val);  // 查找输入范围中val第一次出现的位置
 find_if(beg, end, pred);  //查找第一个令pred为真的元素
区分拷贝元素的版本和不拷贝元素的版本

默认情况下,重排元素的算法将重排后的元素写回给定的输入序列中。这些算法还提供另一个版本,将元素写到一个指定的输出目的位置。如我们所见,写到额外目的的空间的算法都在名字后面附加一个_copy

reverse(beg, end);  //反转输入范围中元素的顺序
 reverse_copy(beg, end, dest);  //将元素按逆序拷贝到dest

一些算法同时提供_copy和_if版本。这些版本接受一个目的位置迭代器和一个谓词

remove_copy_if(vec.cbegin(), vec.cend(), out1_iter, [](int i) { return i % 2; });

//将偶元素拷贝到文件1,vec不变,使得lambda为真的条件是i为奇数,remove将使得谓词为真的元素删除,然后将剩余元素拷贝到文件1,所以是将偶数拷贝到文件1中

remove_copy_if(vec.cbegin(), vec.cend(), out2_iter, [](int i) { return !(i % 2); });
//将奇元素拷贝到文件2,vec不变,使得lambda为真的条件是i为偶数,remove将使得谓词为真的元素删除,然后将剩余元素拷贝到文件2,所以是将奇数拷贝到文件2中

     10.6特定容器的算法

 Lst.merge(lst2)

Lst.metge(lst2, comp)

将来自lst2的元素合并入lst。Lst和lst2都必须是有序的,元素将从lst2中删除。在合并之后,lst2变为空。第一个版本使用<运算符;第二个版本使用给定的比较操作

Lst.remove(val)

Lst.remove_if(pred)

调用erase删除掉与给定值相等(==)或令一元谓词为真的每个元素

Lst.reverse()

反转lst中的元素的顺序

Lst.sort()

Lst.sort(comp)

使用<或给定的比较操作排序元素

Lst.unique()

Lst.unique(pred)

调用erase删除同一个值得连续拷贝。第一个版本使用==;第二个版本使用给定的二元谓词

 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值