首页 理论教育 C++STL逆转算法:的用法解析

C++STL逆转算法:的用法解析

时间:2023-10-25 理论教育 版权反馈
【摘要】:逆转算法用于将容器或序列中的元素按逆向顺序反转,即第1个元素变成倒数第一个元素,第2个元素变成倒数第二个元素,依次反转。STL提供了两种可以实现逆转功能的算法:reverse()和reverse_copy()。值得注意的是,上述两种算法的参数均是迭代器。通过迭代器可以指定需要逆转的元素的范围,也就是说,既可以逆转整个容器中的所有元素,也可以逆转容器中的部分元素。List型容器的迭代器在移动时,其使用方法和vector型容器是不同的。

C++STL逆转算法:的用法解析

逆转算法用于将容器或序列中的元素按逆向顺序反转,即第1个元素变成倒数第一个元素,第2个元素变成倒数第二个元素,依次反转。STL提供了两种可以实现逆转功能的算法:reverse()和reverse_copy()。

这两种算法均使用双向迭代器,其原型为:

978-7-111-51399-5-Chapter04-79.jpg

reverse()算法会将[beg,end]中的元素全部逆序;reverse_copy()算法会将[source-Beg,sourceEnd]内的元素复制到“以destBeg起始的目标区间”,并在复制过程中颠倒元素次序。reverse_copy()算法返回区间内最后一个被复制元素的下一位置,即第一个未被覆盖的元素。

在使用过程中,程序员必须确保目标区间足够大,否则需要使用插入型迭代器。

值得注意的是,上述两种算法的参数均是迭代器。通过迭代器可以指定需要逆转的元素的范围,也就是说,既可以逆转整个容器中的所有元素,也可以逆转容器中的部分元素。

例4-21

978-7-111-51399-5-Chapter04-80.jpg

978-7-111-51399-5-Chapter04-81.jpg(www.xing528.com)

例4-21的执行效果如图4-21所示。

978-7-111-51399-5-Chapter04-82.jpg

图4-21 例4-21的执行效果

总结

通过本节和前面几节的学习读者应该意识到几个问题:

为什么没有使用assign()直接赋值一个常量数组到list型的容器?

List型容器的迭代器在移动时,其使用方法和vector型容器是不同的。vector型迭代器在移动时可以使用加法运算(如例4-21中所示),而list型迭代器需要使用advance()函数。本小节在此前介绍了advance()。advance()可以方便地实现容器的迭代器的前进和后退。

只有随机访问型迭代器才可以使用加、减法运算,直接将偏移量加到迭代器上。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈