C++ 如何";参考;指向调用迭代器的对象

C++ 如何";参考;指向调用迭代器的对象,c++,const-iterator,C++,Const Iterator,我有一个类myTest,它实现了一个包含一组元素的数组和另一个包含元素occorrences的数组。 示例:如果用户插入此输入:{2,5,76,76},则我已实例化数组[]={2,5,76},出现次数[]={1,1,2}。 然后我有一个随机访问迭代器,现在当我用迭代器打印我的数组时,我得到这个控制台输出“2,5,76”,它在控制台中写入我数组的所有元素,我怎么能得到一个迭代器来打印我的数组计数OCcorrence?我想要这样的打印输出:“2,5,76,76”,那么我应该在哪里修改迭代器以获得我想

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

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

您的意思是:

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);
    }
}
矢量元素;
向量时间;
对于(int i=0;i=0&&idx
如果您不关心原始数组中元素的顺序,那么最好切换到
std::map
std::unordered_map
并使用元素作为键,元素计数为VAL:
{2=>1,5=>1,76=>2}
在Perl语法中。 或者,定义自己的迭代器类:

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;
};
模板结构DoubleArrayIterator{
双人排球运动员(T*jimmy,T*billy):吉米(jimmy),比利(billy){}
DoubleArrayIterator&operator++(){++jimmy,++billy;返回*this;}
std::pair操作符*()const{return std::make_pair(*jimmy,*billy);}
静态DoubleArrayIterator begin(T*jimmy,T*billy){返回DoubleArrayIterator(jimmy,billy);}
模板静态DoubleArrayIterator end(T(&jimmy)[N],T(&billy)[N]){返回DoubleArrayIterator(jimmy+N,billy+N);}
布尔运算符==(DoubleArrayIterator const&that){return jimmy==that.jimmy&&billy==that.billy;}
私人:
吉米,比利;
};

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

您能给出一些您正在做的示例代码吗?如果您已经将用户输入存储在一个向量中,只需对该向量进行迭代即可获得预期的输出。@MoksudAhmed请在您的问题中输入您的代码@MoksudAhmed:请先翻译它-StackOverflow是英文的。@MoksudAhmed,并且,在这里发布之前,将您的代码缩减为a。
std::find
将:迭代器返回到满足条件的第一个元素,如果找不到这样的元素,则返回到最后一个。你为什么不这样用呢?我需要迭代器自动打印所有元素,并分别出现。