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