如何在C++中将迭代器作为函数参数传递

How to Pass Iterator as Function Parameter in C++

本文关键字:函数 参数传递 迭代器 C++      更新时间:2023-10-16

我正在编写自己的C++向量类,我希望能够将迭代器作为函数参数传递给我的 reverse(( 函数,以便我可以做类似的事情

vector<int> scores{5,8,89,32};
reverse(scores.begin(), scores.end());

而不是

...
scores.reverse(); 
or 
reverse(scores)

我可以用这段代码做后面的事情

template<typename T>
void reverse(vector<T> &orig) {
//Reverse the elements of the array
auto begin = orig.begin();
auto end = --orig.end();    //Move the iterator 1 place back to keep within range
while (begin < end) {
std::swap(*begin, *end);
begin++;
end--;
}
}

但是当我这样做时

template<typename T>
void reverse(vector<T>::iterator begin, vector<T>::iterator end) {
while (begin < end) {
std::swap(*begin, *end);
begin++;
end--;
}
}

我收到此错误

error: expected ')' before 'begin'

请问我做错了什么?

谢谢。

它应该是:

template <typename T>
void reverse(typename std::vector<T>::iterator begin, typename std::vector<T>::iterator end)
{...}

如果没有typename编译器就无法确定iterator是成员还是类型。因此,编译器假定它是一个成员。