如何使用std::for_each
调用类成员函数
这是我的课程。
template <typename _TyG>
class Graph {
private:
public:
typedef typename Vertex<_TyG> VertexType;
typedef typename std::set<VertexType> GraphStorage;
typedef typename GraphStorage::iterator GraphStorageItr;
typedef typename GraphStorage::const_iterator GraphStorageConstItr;
typedef typename std::list<VertexType *> AdjListType;
typedef typename AdjListType::iterator AdjListTypeItr;
typedef typename AdjListType::const_iterator AdjListTypeConstItr;
typedef typename std::map< VertexType*,
AdjListType,
CompareIterator<VertexType*> > GraphType;
typedef typename GraphType::iterator GraphTypeItr;
typedef typename GraphType::const_iterator GraphTypeConstItr;
void _init_not_visited(GraphTypeItr inItr) {
}
void DepthFirstSearch() {
std::for_each(m_Graph.begin(), m_Graph.end(), std::bind2nd(std::mem_fun(&Graph::_init_not_visited),this));
}
}
我想要的是将迭代器传递给_init_not_visited
。但我对如何使用std::for_each
感到困惑,目前的代码给了我编译错误。
答案 0 :(得分:2)
我认为你不能用std :: for_each做你想做的事情。由于std :: for_each在序列中的每个值上调用给定函数,而不是序列中的每个迭代器位置。 std :: for_each可能看起来像:
template <class iter_t, class fn_t>
fn_t for_each(iter_t first iter_t const last, fn_t fn)
{
for (; first != last; ++first)
fn(*first);
return fn;
}
您可以编写自己的for_each_iter,例如:
template <class iter_t, class fn_t>
fn_t for_each_iter(iter_t first, iter_t const last, fn_t fn)
{
for (; first != last; ++first) {
fn(first);
}
return fn;
}
或者更改_init_not_visited()以使用GraphType :: value_type而不是GraphTypeItr。假设您仍然可以使用该参数编写函数。