C++ 如何";参考;指向调用迭代器的对象
我有一个类myTest,它实现了一个包含一组元素的数组和另一个包含元素occorrences的数组。 示例:如果用户插入此输入: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”,那么我应该在哪里修改迭代器以获得我想
{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
将:迭代器返回到满足条件的第一个元素,如果找不到这样的元素,则返回到最后一个。你为什么不这样用呢?我需要迭代器自动打印所有元素,并分别出现。