在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
函数获取当前元素的前一个元素和两个元素之前的元素。