【发布时间】:2016-07-05 03:06:13
【问题描述】:
下面的代码在第二个函数调用中给了我错误。如何让我的函数同时接受 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;
}
【问题讨论】:
-
请给一点代码sn-p。
-
我怀疑
for循环中的 条件 没有达到您的预期。
标签: c++ templates stl iterator