Shu*_*ain 4 c++ templates iterator stl
下面的代码在第二个函数调用中给了我错误。如何使我的函数接受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;
}
Run Code Online (Sandbox Code Playgroud)
如何使我的函数接受迭代器和反向迭代器作为参数
不,它们根本就是不同的类型。您可以制作一个函数模板,例如:
template <typename I1, typename I2>
void traverse(I1 begin, I1 end, I1 sbegin, I1 send, I2 abegin, I2 aend) {
...
}
Run Code Online (Sandbox Code Playgroud)
BTW:参数名称beginand与andend混淆。您可能想更改它们。std::beginstd::end
| 归档时间: |
|
| 查看次数: |
1098 次 |
| 最近记录: |