-1

我有一个 myTest 类,它实现了一个包含一组元素的数组和另一个包含元素出现次数的数组。示例:如果用户插入此输入:{2,5,76,76},我已实例化array[]= {2,5,76}, occurrences[]= {1,1,2}.

然后我有一个随机访问迭代器,现在当我用迭代器打印出我的数组时,我获得了这个控制台输出"2,5,76",它在控制台中写入了我的数组的所有元素,我怎样才能获得一个迭代器来打印我的数组计算出现次数?我想要这样的打印输出:"2,5,76,76",那么我应该在哪里修改我的迭代器以获得我想要的东西?

4

2 回答 2

0

你的意思是你想要:

vector<int> elements;
vector<int> times;

for (int i=0; i<input.size(); i++) {
    const int idx =  std::find(elements.begin(), elements.end(), input[i]) - elements.begin(); // you asked about this line?
    if (idx >= 0 && idx < times.size())
        ++times[idx];
    else {
        elements.push_back(input[i]);
        times.push_back(1);
    }
}
于 2016-04-18T12:59:30.743 回答
0

如果您不关心原始数组中元素的顺序,最好切换到std::maporstd::unordered_map并使用元素作为键,元素计为 vals:{2 => 1, 5 => 1, 76 => 2}在 Perl 语法中。或者,定义您自己的 Iterator 类:

template<typename T> struct DoubleArrayIterator {
    DoubleArrayIterator(T *jimmy, T *billy): jimmy(jimmy), billy(billy) {}
    DoubleArrayIterator &operator++() { ++jimmy, ++billy; return *this; }
    std::pair<T, T> operator*() const { return std::make_pair(*jimmy, *billy); }
    static DoubleArrayIterator begin(T *jimmy, T *billy) { return DoubleArrayIterator(jimmy, billy); }
    template<size_t N> static DoubleArrayIterator end(T (&jimmy)[N], T(&billy)[N]) { return DoubleArrayIterator(jimmy + N, billy + N); }
    bool operator==(DoubleArrayIterator const &that) { return jimmy == that.jimmy && billy == that.billy; }
private:
    T *jimmy, *billy;
};

或者简单地使用索引而不是迭代器。

于 2016-04-18T13:03:48.480 回答