一、函數介紹
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/zh-tw/n/147433.html