如果这是一个微不足道的问题,请原谅我,我只是在学习 C++,并试图理解某些概念。尤其是当涉及到迭代器时,我完全迷失了。
假设我有一个表示某种数据结构的自定义类,其成员之一是整数向量。我想为该类编写一个双向迭代器,它仅输出向量中的偶数。有没有简单且有启发性的方法?我不想使用 STL 以外的库。
#include <vector>
#include <iostream>
class X {
public:
class EvenIterator {
public:
EvenIterator(std::vector<int>::iterator it, std::vector<int>::iterator end) : it(it), end(end) {
while (true) {
if (isEven(*it)) {
break;
} else if (it == end) {
break;
}
it++;
}
}
bool operator != (const EvenIterator& evenIt) {
return evenIt.it != this->it;
}
int operator * () {
return *it;
}
EvenIterator operator ++ () {
while (true) {
it++;
if (isEven(*it)) {
return EvenIterator(it, end);
} else if (it == end) {
return EvenIterator(it, end);
}
}
}
private:
std::vector<int>::iterator it;
std::vector<int>::iterator end;
};
static bool isEven(int number) {
return number % 2 == 0;
}
void add(int number) {
v.push_back(number);
}
EvenIterator evenBegin() {
return EvenIterator(v.begin(), v.end());
}
EvenIterator evenEnd() {
return EvenIterator(v.end(), v.end());
}
private:
std::vector<int> v;
};
int main() {
X x;
x.add(1);
x.add(2);
x.add(3);
x.add(2);
x.add(2);
x.add(31);
x.add(56);
x.add(101);
for (X::EvenIterator it = x.evenBegin(); it != x.evenEnd(); ++it){
std::cout << *it << std::endl; // only prints the even numbers
}
}
Run Code Online (Sandbox Code Playgroud)