千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > vectorreverse函数详解

vectorreverse函数详解

来源:千锋教育
发布人:xqq
时间: 2023-11-25 10:04:36 1700877876

一、函数介绍

vectorreverse是C++ STL库中的一个函数,它可以将一个vector类型的容器中元素的顺序进行反转,也可以称为是逆向排列。

二、函数的声明


template 
void reverse ( BidirectionalIterator first, BidirectionalIterator last );

这里BidirectionalIterator是一个泛型类,表示可正反向移动的迭代器类型,容器类型为vector、deque等均可使用该函数。

三、函数的使用方法

使用vectorreverse函数,需要在头文件中引入此函数,调用时只需传入需要反转的首末迭代器即可。


std::vector myvector;
std::vector::iterator it;

//向myvector中插入数据
for (int i=1; i<=5; i++) myvector.push_back(i);

//反转myvector中的元素
std::reverse(myvector.begin(),myvector.end());

//输出结果
std::cout << "myvector contains:";
for (it=myvector.begin(); it!=myvector.end(); ++it)
    std::cout << ' ' << *it;
std::cout << '\n';

结果如下:

myvector contains: 5 4 3 2 1

四、函数的实现原理

vectorreverse底层其实是调用了STL库中的std::iter_swap函数,该函数可以交换两个迭代器指向的元素。

vectorreverse的原理就是不断的交换首、尾位置的元素,直到首尾迭代器相遇为止。


template 
inline void reverse(_BidirectionalIterator __first, _BidirectionalIterator __last)
{
    __reverse_dispatch(__first, __last, iterator_category(__first));
}

template 
inline void __reverse(_BidirectionalIterator __first, _BidirectionalIterator __last, _BidirectionalIterator2*, bidirectional_iterator_tag) 
{
    while (true)
        if (__first == __last || __first == --__last)  //当首、尾迭代器相遇或尾迭代器指向首迭代器时退出
            return;               
        else
            std::iter_swap(__first++, __last);   //使用std::iter_swap函数交换首、尾位置元素
}

五、函数的应用场景

vectorreverse函数通常在需要倒序遍历vector类型容器时使用。

如在输出整数数组(或vector)的时候顺序输出元素不方便查看时,可以使用vectorreverse进行反转,然后再输出。

六、函数的注意事项

使用vectorreverse函数时需注意传入的容器必须支持双向迭代器,如vector、deque等。

使用该函数时,应确保首、尾迭代器指向的元素在反转后不会产生任何的异常。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT