一、函数介绍
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等。
使用该函数时,应确保首、尾迭代器指向的元素在反转后不会产生任何的异常。
原创文章,作者:EAFD,如若转载,请注明出处:https://www.506064.com/n/147433.html