如果这是一个微不足道的问题,请原谅我,我只是在学习 C++,并试图理解某些概念。尤其是当涉及到迭代器时,我完全迷失了。
假设我有一个表示某种数据结构的自定义类,其成员之一是整数向量。我想为该类编写一个双向迭代器,它仅输出向量中的偶数。有没有简单且有启发性的方法?我不想使用 STL 以外的库。
不确定制作自己的迭代器是否容易。但最好的办法可能是使用条件for_each
功能。
std::for_each
对每个元素进行操作。创建一个非常容易for_each_if
对某些特定元素进行操作。例如,下面的程序仅打印向量中的偶数(4、6 和 8)。
#include <iostream>
#include <vector>
using namespace std;
struct is_even {
typedef bool return_type;
bool operator() (const int& value) {return (value%2)==0; }
};
struct doprint {
bool operator() (const int& value) { std::cout << value << std::endl; }
};
template <class InputIterator, class Predicate, class Function>
void for_each_if(InputIterator first, InputIterator last, Function f, Predicate pred)
{
while ( first != last )
{
if (pred (*first))
f(*first++);
else
first ++;
}
}
int main()
{
std::vector<int> v;
v.push_back( 4 );
v.push_back( 5 );
v.push_back( 6 );
v.push_back( 8 );
for_each_if( v.begin(), v.end(), doprint(), is_even());
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)