【发布时间】:2020-05-31 11:46:32
【问题描述】:
我正在编写自己的 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'
请问我做错了什么?
谢谢。
【问题讨论】:
-
我偶然发现了更多问题: 1. 即使修复了@NutCracker,我也收到了投诉,因为类型推导没有按预期工作。作弊后跳过扣除... 2. 你的
reverse()有 U.B.您访问end,但end可能是存储结束的一个结束。所以,我在循环中修复了迭代。这是我的固定样本:Live Demo on coliru。 (但是,@NutCracker 指出了您问题的主要问题。因此,我没有将我的发现添加为答案。) -
非常感谢。我应该在调用 reverse 函数时添加模板类型。我没有。刚刚做了,在我添加了@NutCracker 建议后它起作用了。现在可以了。
标签: c++ templates vector parameters iterator