【问题标题】:Can a function accept both iterator and reverse_iterator as parameter函数可以同时接受迭代器和反向迭代器作为参数吗
【发布时间】:2016-07-05 03:06:13
【问题描述】:

下面的代码在第二个函数调用中给了我错误。如何让我的函数同时接受 iteratorreverse_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


【解决方案1】:

如何让我的函数同时接受迭代器和反向迭代器作为参数

不,它们是完全不同的类型。您可以制作如下函数模板:

template <typename I1, typename I2>
void traverse(I1 begin, I1 end, I1 sbegin, I1 send, I2 abegin, I2 aend) {
    ...
}

顺便说一句:参数名称beginendstd::beginstd::end 混淆。您可能想要更改它们。

【讨论】:

    猜你喜欢
    • 2011-01-03
    • 2020-10-28
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    相关资源
    最近更新 更多