2022-09-16stl学习心得

关于函数find_end()


通过使用萃取机得到迭代器的iterator_category类型,在调用实现好的find_end_dispatch()函数对于不同的iterator_category类型做具体的实现。


对于可以双向访问的重载来说,使用了reverse_iterator迭代器的技术

反向迭代器适配器(reverse_iterator),可简称为反向迭代器或逆向迭代器,常用来对容器进行反向遍历,即从容器中存储的最后一个元素开始,一直遍历到第一个元素。

在这个函数里是要在first1,last1中找到first2,last2的最后一个子序列位置。具体做法就用first1,first2用reverse_iterator构造成rlast,在调用search,此时就相当于search从last1位置找到第一个last2,找到之后再使用base()函数,将一个镜像翻转的迭代器赋值给result。

关于base()函数:(来自https://blog.csdn.net/zhizhengguan/article/details/120347183)

reverse_iterator的base成员函数返回一个"对应的"iterator的说法并不准确。对于插入操作而言,的确如此;但是对于删除操作,并非如此。当需要把reverse_iterator转换成iterator的时候,有一点非常重要的是你必须知道你准备怎么处理返回的iterator,因为只有这样你才能决定你得到的iterator是否是你需要的。

进行删除操作的技巧:


所以这里使用base函数是为了接下来迭代器移动做准备,advance() 函数用于将迭代器前进(或者后退)指定长度的距离,因为需要返回的是子序列的第一个位置迭代器,所以要将得到的result向前移动first2到last2个长度。

你可能感兴趣的:(2022-09-16stl学习心得)