[英]Can a function accept both iterator and reverse_iterator as parameter
The code below is giving me error in the second function call. 下面的代码在第二个函数调用中给出了错误。 How can I make my function accept both
iterator
and reverse_iterator
as parameter, rather than making a second function with parameter type such as vector<int>::reverse_iterator
如何使我的函数接受
iterator
和reverse_iterator
作为参数,而不是使用参数类型创建第二个函数,如vector<int>::reverse_iterator
#include <bits/stdc++.h>
using namespace std;
void traverse(vector<int>::iterator begin, vector<int>::iterator end, vector<int>::iterator sbegin, vector<int>::iterator send, string::iterator abegin, string::iterator aend) {
int last = -1;
auto i=begin;auto j=sbegin;auto k=abegin;
for(; i<end,j<send,k<aend ; i++,j++,k++){
if(*k=='1') {
last = *i;
*j = 0;
}
else {
if(last==-1) continue;
int min_length = *i-last;
*j = min({ *j,min_length });
last = *i;
}
}
}
int main() {
int t;
cin >> t;
while(t--) {
int n;
cin >> n;
string available;
cin >> available;
vector<int> coordinates(n);
for (int i = 0; i < n; ++i)
cin >> coordinates[i];
vector<int> shortest(n,INT_MAX);
traverse(coordinates.begin(), coordinates.end(), shortest.begin(), shortest.end(), available.begin(), available.end());
traverse(coordinates.rbegin(), coordinates.rend(), shortest.rbegin(), shortest.rend(), available.rbegin(), available.rend());
int sum = 0;
for(int elem: shortest)
sum+=elem;
cout << sum << endl;
}
return 0;
}
How can I make my function accept both iterator and reverse_iterator as parameter
如何使我的函数接受iterator和reverse_iterator作为参数
No, they're different types at all. 不,他们是完全不同的类型。 You can make a function template like:
您可以创建一个功能模板,如:
template <typename I1, typename I2>
void traverse(I1 begin, I1 end, I1 sbegin, I1 send, I2 abegin, I2 aend) {
...
}
BTW: The parameter name begin
and end
is confused with std::begin
and std::end
. BTW:参数名称
begin
和end
与std::begin
和std::end
混淆。 You might want to change them. 您可能想要更改它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.