在C++中,你可以通過編寫一個模板函數來實現自定義的prev
函數
#include<iostream>
#include<vector>
#include<iterator>
template<typename BidirectionalIterator>
BidirectionalIterator my_prev(BidirectionalIterator it, int n = 1) {
std::advance(it, -n);
return it;
}
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
auto it = vec.begin() + 2; // 指向第三個元素,即值為3的元素
std::cout << "Current element: " << *it<< std::endl;
auto prev_it = my_prev(it);
std::cout << "Previous element: " << *prev_it<< std::endl;
auto prev_prev_it = my_prev(it, 2);
std::cout << "Two steps back: " << *prev_prev_it<< std::endl;
return 0;
}
在這個示例中,我們創建了一個名為my_prev
的模板函數,它接受一個雙向迭代器(如std::vector
或std::list
的迭代器)和一個可選的整數參數n
,表示要向后移動的步數。默認情況下,n
為1,表示只返回前一個元素。
然后,我們使用std::advance
函數將迭代器向后移動n
個位置。請注意,由于我們使用了負數作為std::advance
的參數,所以迭代器實際上是向前移動的。最后,函數返回更新后的迭代器。
在main
函數中,我們創建了一個包含5個整數的std::vector
,并使用my_prev
函數獲取當前元素的前一個元素和兩個元素之前的元素。